diff --git a/flake.nix b/flake.nix index afe72045..7aa18512 100644 --- a/flake.nix +++ b/flake.nix @@ -18,86 +18,89 @@ }; }; - outputs = inputs: let - waybar-experimental-overlay = final: prev: { - waybar = prev.waybar.overrideAttrs (oldAttrs: { - mesonFlags = oldAttrs.mesonFlags ++ ["-Dexperimental=true"]; - }); - }; - system = "x86_64-linux"; - specialArgs = {inputs = inputs;}; - pkgs = import inputs.nixpkgs { - system = system; - config.allowUnfree = true; - overlays = [ - waybar-experimental-overlay - inputs.neovim-nightly-overlay.overlay - ]; - }; - in { - nixosConfigurations = { - Legion = inputs.nixpkgs.lib.nixosSystem { - specialArgs = specialArgs; - pkgs = pkgs; - modules = [./hosts/Legion]; + outputs = { + self, + nixpkgs, + home-manager, + ... + } @ inputs: { + nixosConfigurations = let + topLevel = ./.; + userConfig = { + isNormalUser = true; + description = "Evie Litherland-Smith"; + extraGroups = ["networkmanager" "wheel"]; + shell = pkgs.fish; + openssh.authorizedKeys.keys = import ./auth/authorized_keys.nix; }; - Vanguard = inputs.nixpkgs.lib.nixosSystem { - specialArgs = specialArgs; - pkgs = pkgs; - modules = [./hosts/Vanguard]; + specialArgs = {inherit inputs topLevel userConfig;}; + waybar-experimental-overlay = final: prev: { + waybar = prev.waybar.overrideAttrs (oldAttrs: { + mesonFlags = oldAttrs.mesonFlags ++ ["-Dexperimental=true"]; + }); }; - Ronin = inputs.nixpkgs.lib.nixosSystem { - specialArgs = specialArgs; - pkgs = pkgs; - modules = [./hosts/Ronin]; - }; - }; - homeConfigurations = { - "tux@Monarch" = inputs.home-manager.lib.homeManagerConfiguration { - pkgs = inputs.nixpkgs.legacyPackages."aarch64-darwin"; - modules = [ - ({pkgs, ...}: { - imports = [./home/personal.nix ./home/gui/wezterm]; - home = { - username = "tux"; - homeDirectory = "/Users/tux"; - stateVersion = "23.05"; - packages = [pkgs.gcc]; - }; - programs = { - home-manager.enable = true; - zsh = { - sessionVariables.CC = "${pkgs.gcc}/bin/gcc"; - envExtra = '' - eval "$(/opt/homebrew/bin/brew shellenv)" - ''; - }; - }; - services.syncthing.enable = true; - }) - ]; - }; - "xenia@Northstar" = inputs.home-manager.lib.homeManagerConfiguration { - pkgs = inputs.nixpkgs.legacyPackages."aarch64-linux"; - modules = [ - { - imports = [./home/personal.nix]; - home = { - username = "xenia"; - homeDirectory = "/home/xenia"; - stateVersion = "22.11"; - }; - programs = { - home-manager.enable = true; - bash.bashrcExtra = '' - source $HOME/.nix-profile/etc/profile.d/nix.sh - ''; - }; - services.syncthing.enable = true; - fonts.fontconfig.enable = true; - } + system = "x86_64-linux"; + pkgs = import nixpkgs { + inherit system; + config.allowUnfree = true; + overlays = [ + waybar-experimental-overlay + inputs.neovim-nightly-overlay.overlay ]; }; + in { + Legion = let + hostname = "Legion"; + in + nixpkgs.lib.nixosSystem { + inherit pkgs specialArgs; + modules = [./hosts/${hostname}/configuration.nix]; + }; + Vanguard = let + hostname = "Vanguard"; + in + nixpkgs.lib.nixosSystem { + inherit pkgs specialArgs; + modules = [./hosts/${hostname}/configuration.nix]; + }; + Ronin = let + hostname = "Ronin"; + in + nixpkgs.lib.nixosSystem { + inherit pkgs specialArgs; + modules = [./hosts/${hostname}/configuration.nix]; + }; + }; + homeConfigurations = let + extraSpecialArgs = {inherit inputs;}; + in { + # NixOS home configurations + "xenia@Vanguard" = let + hostname = "Vanguard"; + pkgs = self.nixosConfigurations.${hostname}.pkgs; + in + home-manager.lib.homeManagerConfiguration { + inherit pkgs extraSpecialArgs; + modules = [./hosts/${hostname}/home.nix]; + }; + "elitherl@Ronin" = let + hostname = "Ronin"; + pkgs = self.nixosConfigurations.${hostname}.pkgs; + in + home-manager.lib.homeManagerConfiguration { + inherit pkgs extraSpecialArgs; + modules = [./hosts/${hostname}/home.nix]; + }; + # Legacy home configurations + "tux@Monarch" = let + hostname = "Monarch"; + system = "aarch64-darwin"; + pkgs = inputs.nixpkgs.legacyPackages.${system}; + in + home-manager.lib.homeManagerConfiguration { + inherit pkgs extraSpecialArgs; + modules = [./hosts/${hostname}/home.nix]; + }; }; }; } diff --git a/home/default.nix b/home/default.nix deleted file mode 100644 index 0cf753a8..00000000 --- a/home/default.nix +++ /dev/null @@ -1 +0,0 @@ -{...}: {imports = [./env ./tui];} diff --git a/home/desktop/awesome/default.nix b/home/desktop/awesome/default.nix deleted file mode 100644 index 1f0e4a5b..00000000 --- a/home/desktop/awesome/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{pkgs, ...}: { - xdg.configFile."awesome/rc.lua".source = ./rc.lua; - xsession.windowManager.awesome = { - enable = true; - luaModules = [pkgs.luaPackages.vicious]; - }; -} diff --git a/home/desktop/awesome/rc.lua b/home/desktop/awesome/rc.lua deleted file mode 100644 index 368c30c9..00000000 --- a/home/desktop/awesome/rc.lua +++ /dev/null @@ -1,584 +0,0 @@ --- If LuaRocks is installed, make sure that packages installed through it are --- found (e.g. lgi). If LuaRocks is not installed, do nothing. -pcall(require, "luarocks.loader") - --- Standard awesome library -local awesome = require "awesome" -local root = require "root" -local gears = require "gears" -local awful = require "awful" -require "awful.autofocus" --- Widget and layout library -local wibox = require "wibox" --- Theme handling library -local beautiful = require "beautiful" --- Notification library -local naughty = require "naughty" -local menubar = require "menubar" -local hotkeys_popup = require "awful.hotkeys_popup" --- Enable hotkeys help widget for VIM and other apps --- when client with a matching name is opened: -require "awful.hotkeys_popup.keys" - --- {{{ Error handling --- Check if awesome encountered an error during startup and fell back to --- another config (This code will only ever execute for the fallback config) -if awesome.startup_errors then - naughty.notify { - preset = naughty.config.presets.critical, - title = "Oops, there were errors during startup!", - text = awesome.startup_errors, - } -end - --- Handle runtime errors after startup -do - local in_error = false - awesome.connect_signal("debug::error", function(err) - -- Make sure we don't go into an endless error loop - if in_error then return end - in_error = true - - naughty.notify { - preset = naughty.config.presets.critical, - title = "Oops, an error happened!", - text = tostring(err), - } - in_error = false - end) -end --- }}} - --- {{{ Variable definitions --- Themes define colours, icons, font and wallpapers. -beautiful.init(gears.filesystem.get_themes_dir() .. "gtk/theme.lua") - --- This is used later as the default terminal and editor to run. -local terminal = "wezterm" -local editor = "nvim" -local editor_cmd = terminal .. " -e " .. editor - --- Default modkey. --- Usually, Mod4 is the key with a logo between Control and Alt. --- If you do not like this or do not have such a key, --- I suggest you to remap Mod4 to another key using xmodmap or other tools. --- However, you can use another modifier like Mod1, but it may interact with others. -local modkey = "Mod4" - --- Table of layouts to cover with awful.layout.inc, order matters. -awful.layout.layouts = { - awful.layout.suit.tile, - awful.layout.suit.fair, - awful.layout.suit.max, - awful.layout.suit.magnifier, - awful.layout.suit.floating, -} --- }}} - --- {{{ Menu --- Create a launcher widget and a main menu -local menuitems = { - { "hotkeys", function() hotkeys_popup.show_help(nil, awful.screen.focused()) end }, - { "manual", terminal .. " -e man awesome" }, - { "edit config", editor_cmd .. " " .. awesome.conffile }, - { "restart", awesome.restart }, - { "quit", function() awesome.quit() end }, -} - -local mainmenu = awful.menu { - items = { - { "awesome", menuitems, beautiful.awesome_icon }, - { "open terminal", terminal }, - { "open" .. editor, editor_cmd }, - }, -} - -local launcher = awful.widget.launcher { image = beautiful.awesome_icon, menu = mainmenu } - --- Menubar configuration -menubar.utils.terminal = terminal -- Set the terminal for applications that require it --- }}} - --- Keyboard map indicator and switcher -local keyboard_layout = awful.widget.keyboardlayout() - --- {{{ Wibar --- Create a textclock widget -local mytextclock = wibox.widget.textclock() - --- Create a wibox for each screen and add it -local taglist_buttons = gears.table.join( - awful.button({}, 1, function(t) t:view_only() end), - awful.button({ modkey }, 1, function(t) - if client.focus then client.focus:move_to_tag(t) end - end), - awful.button({}, 3, awful.tag.viewtoggle), - awful.button({ modkey }, 3, function(t) - if client.focus then client.focus:toggle_tag(t) end - end), - awful.button({}, 4, function(t) awful.tag.viewnext(t.screen) end), - awful.button({}, 5, function(t) awful.tag.viewprev(t.screen) end) -) - -local tasklist_buttons = gears.table.join( - awful.button({}, 1, function(c) - if c == client.focus then - c.minimized = true - else - c:emit_signal("request::activate", "tasklist", { raise = true }) - end - end), - awful.button({}, 3, function() awful.menu.client_list { theme = { width = 250 } } end), - awful.button({}, 4, function() awful.client.focus.byidx(1) end), - awful.button({}, 5, function() awful.client.focus.byidx(-1) end) -) - -local function set_wallpaper(s) - -- Wallpaper - if beautiful.wallpaper then - local wallpaper = beautiful.wallpaper - -- If wallpaper is a function, call it with the screen - if type(wallpaper) == "function" then wallpaper = wallpaper(s) end - gears.wallpaper.maximized(wallpaper, s, true) - end -end - --- Re-set wallpaper when a screen's geometry changes (e.g. different resolution) -screen.connect_signal("property::geometry", set_wallpaper) - -awful.screen.connect_for_each_screen(function(s) - -- Wallpaper - set_wallpaper(s) - - -- Each screen has its own tag table. - awful.tag({ "main", "dev", "browser", "files", "chat", "remote" }, s, { - awful.layout.suit.tile, - awful.layout.suit.tile, - awful.layout.suit.tile, - awful.layout.suit.tile, - awful.layout.suit.tile, - awful.layout.suit.max, - }) - - -- Create a promptbox for each screen - s.mypromptbox = awful.widget.prompt() - -- Create an imagebox widget which will contain an icon indicating which layout we're using. - -- We need one layoutbox per screen. - s.mylayoutbox = awful.widget.layoutbox(s) - s.mylayoutbox:buttons( - gears.table.join( - awful.button({}, 1, function() awful.layout.inc(1) end), - awful.button({}, 3, function() awful.layout.inc(-1) end), - awful.button({}, 4, function() awful.layout.inc(1) end), - awful.button({}, 5, function() awful.layout.inc(-1) end) - ) - ) - -- Create a taglist widget - s.mytaglist = awful.widget.taglist { - screen = s, - filter = awful.widget.taglist.filter.all, - buttons = taglist_buttons, - } - - -- Create a tasklist widget - s.mytasklist = awful.widget.tasklist { - screen = s, - filter = awful.widget.tasklist.filter.currenttags, - buttons = tasklist_buttons, - } - - -- Create the wibox - s.mywibox = awful.wibar { position = "top", screen = s } - - -- Add widgets to the wibox - s.mywibox:setup { - layout = wibox.layout.align.horizontal, - { -- Left widgets - layout = wibox.layout.fixed.horizontal, - launcher, - s.mytaglist, - s.mypromptbox, - }, - s.mytasklist, -- Middle widget - { -- Right widgets - layout = wibox.layout.fixed.horizontal, - keyboard_layout, - wibox.widget.systray(), - mytextclock, - s.mylayoutbox, - }, - } -end) --- }}} - --- {{{ Mouse bindings -root.buttons( - gears.table.join( - awful.button({}, 3, function() mainmenu:toggle() end), - awful.button({}, 4, awful.tag.viewnext), - awful.button({}, 5, awful.tag.viewprev) - ) -) --- }}} - --- {{{ Key bindings -local globalkeys = gears.table.join( - awful.key({ modkey }, "s", hotkeys_popup.show_help, { description = "show help", group = "awesome" }), - awful.key({ modkey }, "w", function() mainmenu:show() end, { description = "show main menu", group = "awesome" }), - awful.key({ modkey }, ",", awful.tag.viewprev, { description = "view previous", group = "tag" }), - awful.key({ modkey }, ".", awful.tag.viewnext, { description = "view next", group = "tag" }), - awful.key({ modkey }, "`", awful.tag.history.restore, { description = "go back", group = "tag" }), - awful.key( - { modkey }, - "[", - function() awful.screen.focus_relative(-1) end, - { description = "focus the previous screen", group = "screen" } - ), - awful.key( - { modkey }, - "]", - function() awful.screen.focus_relative(1) end, - { description = "focus the next screen", group = "screen" } - ), - - awful.key( - { modkey }, - "j", - function() awful.client.focus.byidx(1) end, - { description = "focus next by index", group = "client" } - ), - awful.key( - { modkey }, - "k", - function() awful.client.focus.byidx(-1) end, - { description = "focus previous by index", group = "client" } - ), - awful.key( - { modkey, "Shift" }, - "j", - function() awful.client.swap.byidx(1) end, - { description = "swap with next client by index", group = "client" } - ), - awful.key( - { modkey, "Shift" }, - "k", - function() awful.client.swap.byidx(-1) end, - { description = "swap with previous client by index", group = "client" } - ), - - -- Layout manipulation - awful.key({ modkey }, "u", awful.client.urgent.jumpto, { description = "jump to urgent client", group = "client" }), - awful.key({ modkey }, "Tab", function() - awful.client.focus.history.previous() - if client.focus then client.focus:raise() end - end, { description = "go back", group = "client" }), - - -- Standard program - awful.key( - { modkey }, - "Return", - function() awful.spawn(terminal) end, - { description = "open a terminal", group = "launcher" } - ), - awful.key({ modkey, "Control" }, "r", awesome.restart, { description = "reload awesome", group = "awesome" }), - awful.key({ modkey, "Shift" }, "q", awesome.quit, { description = "quit awesome", group = "awesome" }), - - awful.key( - { modkey }, - "l", - function() awful.tag.incmwfact(0.05) end, - { description = "increase master width factor", group = "layout" } - ), - awful.key( - { modkey }, - "h", - function() awful.tag.incmwfact(-0.05) end, - { description = "decrease master width factor", group = "layout" } - ), - awful.key( - { modkey, "Shift" }, - "h", - function() awful.tag.incnmaster(1, nil, true) end, - { description = "increase the number of master clients", group = "layout" } - ), - awful.key( - { modkey, "Shift" }, - "l", - function() awful.tag.incnmaster(-1, nil, true) end, - { description = "decrease the number of master clients", group = "layout" } - ), - awful.key( - { modkey, "Control" }, - "h", - function() awful.tag.incncol(1, nil, true) end, - { description = "increase the number of columns", group = "layout" } - ), - awful.key( - { modkey, "Control" }, - "l", - function() awful.tag.incncol(-1, nil, true) end, - { description = "decrease the number of columns", group = "layout" } - ), - awful.key( - { modkey }, - "space", - function() awful.layout.inc(1) end, - { description = "select next", group = "layout" } - ), - awful.key( - { modkey, "Shift" }, - "space", - function() awful.layout.inc(-1) end, - { description = "select previous", group = "layout" } - ), - - awful.key({ modkey, "Control" }, "n", function() - local c = awful.client.restore() - -- Focus restored client - if c then c:emit_signal("request::activate", "key.unminimize", { raise = true }) end - end, { description = "restore minimized", group = "client" }), - - -- Prompt - awful.key( - { modkey }, - "r", - function() awful.screen.focused().mypromptbox:run() end, - { description = "run prompt", group = "launcher" } - ), - - awful.key( - { modkey }, - "x", - function() - awful.prompt.run { - prompt = "Run Lua code: ", - textbox = awful.screen.focused().mypromptbox.widget, - exe_callback = awful.util.eval, - history_path = awful.util.get_cache_dir() .. "/history_eval", - } - end, - { description = "lua execute prompt", group = "awesome" } - ), - -- Menubar - awful.key({ modkey }, "p", function() menubar.show() end, { description = "show the menubar", group = "launcher" }) -) - -local clientkeys = gears.table.join( - awful.key({ modkey }, "f", function(c) - c.fullscreen = not c.fullscreen - c:raise() - end, { description = "toggle fullscreen", group = "client" }), - awful.key({ modkey, "Shift" }, "c", function(c) c:kill() end, { description = "close", group = "client" }), - awful.key( - { modkey, "Control" }, - "space", - awful.client.floating.toggle, - { description = "toggle floating", group = "client" } - ), - awful.key( - { modkey, "Control" }, - "Return", - function(c) c:swap(awful.client.getmaster()) end, - { description = "move to master", group = "client" } - ), - awful.key({ modkey }, "o", function(c) c:move_to_screen() end, { description = "move to screen", group = "client" }), - awful.key( - { modkey }, - "t", - function(c) c.ontop = not c.ontop end, - { description = "toggle keep on top", group = "client" } - ), - awful.key({ modkey }, "n", function(c) - -- The client currently has the input focus, so it cannot be - -- minimized, since minimized clients can't have the focus. - c.minimized = true - end, { description = "minimize", group = "client" }), - awful.key({ modkey }, "m", function(c) - c.maximized = not c.maximized - c:raise() - end, { description = "(un)maximize", group = "client" }), - awful.key({ modkey, "Control" }, "m", function(c) - c.maximized_vertical = not c.maximized_vertical - c:raise() - end, { description = "(un)maximize vertically", group = "client" }), - awful.key({ modkey, "Shift" }, "m", function(c) - c.maximized_horizontal = not c.maximized_horizontal - c:raise() - end, { description = "(un)maximize horizontally", group = "client" }) -) - --- Bind all key numbers to tags. --- Be careful: we use keycodes to make it work on any keyboard layout. --- This should map on the top row of your keyboard, usually 1 to 9. -for i = 1, 9 do - globalkeys = gears.table.join( - globalkeys, - -- View tag only. - awful.key({ modkey }, "#" .. i + 9, function() - local screen = awful.screen.focused() - local tag = screen.tags[i] - if tag then tag:view_only() end - end, { description = "view tag #" .. i, group = "tag" }), - -- Toggle tag display. - awful.key({ modkey, "Control" }, "#" .. i + 9, function() - local screen = awful.screen.focused() - local tag = screen.tags[i] - if tag then awful.tag.viewtoggle(tag) end - end, { description = "toggle tag #" .. i, group = "tag" }), - -- Move client to tag. - awful.key({ modkey, "Shift" }, "#" .. i + 9, function() - if client.focus then - local tag = client.focus.screen.tags[i] - if tag then client.focus:move_to_tag(tag) end - end - end, { description = "move focused client to tag #" .. i, group = "tag" }), - -- Toggle tag on focused client. - awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9, function() - if client.focus then - local tag = client.focus.screen.tags[i] - if tag then client.focus:toggle_tag(tag) end - end - end, { description = "toggle focused client on tag #" .. i, group = "tag" }) - ) -end - -local clientbuttons = gears.table.join( - awful.button({}, 1, function(c) c:emit_signal("request::activate", "mouse_click", { raise = true }) end), - awful.button({ modkey }, 1, function(c) - c:emit_signal("request::activate", "mouse_click", { raise = true }) - awful.mouse.client.move(c) - end), - awful.button({ modkey }, 3, function(c) - c:emit_signal("request::activate", "mouse_click", { raise = true }) - awful.mouse.client.resize(c) - end) -) - --- Set keys -root.keys(globalkeys) --- }}} - --- {{{ Rules --- Rules to apply to new clients (through the "manage" signal). -awful.rules.rules = { - -- All clients will match this rule. - { - rule = {}, - properties = { - border_width = beautiful.border_width, - border_color = beautiful.border_normal, - focus = awful.client.focus.filter, - raise = true, - keys = clientkeys, - buttons = clientbuttons, - screen = awful.screen.preferred, - placement = awful.placement.no_overlap + awful.placement.no_offscreen, - }, - }, - - -- Floating clients. - { - rule_any = { - instance = { - "DTA", -- Firefox addon DownThemAll. - "copyq", -- Includes session name in class. - "pinentry", - }, - class = { - "Arandr", - "Blueman-manager", - "Gpick", - "Kruler", - "MessageWin", -- kalarm. - "Sxiv", - "Tor Browser", -- Needs a fixed window size to avoid fingerprinting by screen size. - "Wpa_gui", - "veromix", - "xtightvncviewer", - }, - - -- Note that the name property shown in xprop might be set slightly after creation of the client - -- and the name shown there might not match defined rules here. - name = { - "Event Tester", -- xev. - }, - role = { - "AlarmWindow", -- Thunderbird's calendar. - "ConfigManager", -- Thunderbird's about:config. - "pop-up", -- e.g. Google Chrome's (detached) Developer Tools. - }, - }, - properties = { floating = true }, - }, - - -- Add titlebars to normal clients and dialogs - { rule_any = { type = { "normal", "dialog" } }, properties = { titlebars_enabled = true } }, - - -- Set Firefox to always map on the tag named "2" on screen 1. - -- { rule = { class = "Firefox" }, - -- properties = { screen = 1, tag = "2" } }, -} --- }}} - --- {{{ Signals --- Signal function to execute when a new client appears. -client.connect_signal("manage", function(c) - -- Set the windows at the slave, - -- i.e. put it at the end of others instead of setting it master. - -- if not awesome.startup then awful.client.setslave(c) end - - if awesome.startup and not c.size_hints.user_position and not c.size_hints.program_position then - -- Prevent clients from being unreachable after screen count changes. - awful.placement.no_offscreen(c) - end -end) - --- Add a titlebar if titlebars_enabled is set to true in the rules. -client.connect_signal("request::titlebars", function(c) - -- buttons for the titlebar - local buttons = gears.table.join( - awful.button({}, 1, function() - c:emit_signal("request::activate", "titlebar", { raise = true }) - awful.mouse.client.move(c) - end), - awful.button({}, 3, function() - c:emit_signal("request::activate", "titlebar", { raise = true }) - awful.mouse.client.resize(c) - end) - ) - - awful.titlebar(c):setup { - { -- Left - awful.titlebar.widget.iconwidget(c), - buttons = buttons, - layout = wibox.layout.fixed.horizontal, - }, - { -- Middle - { -- Title - align = "center", - widget = awful.titlebar.widget.titlewidget(c), - }, - buttons = buttons, - layout = wibox.layout.flex.horizontal, - }, - { -- Right - awful.titlebar.widget.floatingbutton(c), - awful.titlebar.widget.maximizedbutton(c), - awful.titlebar.widget.stickybutton(c), - awful.titlebar.widget.ontopbutton(c), - awful.titlebar.widget.closebutton(c), - layout = wibox.layout.fixed.horizontal(), - }, - layout = wibox.layout.align.horizontal, - } -end) - --- Enable sloppy focus, so that focus follows mouse. -client.connect_signal( - "mouse::enter", - function(c) c:emit_signal("request::activate", "mouse_enter", { raise = false }) end -) - -client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end) -client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) --- }}} diff --git a/home/desktop/bspwm.nix b/home/desktop/bspwm.nix deleted file mode 100644 index c33064a3..00000000 --- a/home/desktop/bspwm.nix +++ /dev/null @@ -1,83 +0,0 @@ -{...}: { - imports = [./xfce.nix]; - xsession.windowManager.bspwm = { - enable = true; - settings = { - window_gap = 12; - border_width = 2; - split_ratio = 0.5; - borderless_monocle = false; - gapless_monocle = false; - pointer_modifier = "mod4"; - pointer_action1 = "move"; - pointer_action2 = "resize_side"; - pointer_action3 = "resize_corner"; - focus_follows_pointer = true; - }; - monitors."primary" = ["main" "dev" "browser" "files" "chat" "remote" "steam" "misc"]; - rules = { - "Xfce4-terminal".state = "floating"; - "Nm-connection-editor".state = "floating"; - "Qemu-system-x86_64".state = "floating"; - "Pavucontrol".state = "floating"; - "Otpclient".state = "floating"; - ".blueman-manager-wrapped".state = "floating"; - "neovide".desktop = "dev"; - "firefox".desktop = "browser"; - "Thunar".desktop = "files"; - "Element".desktop = "chat"; - "Signal".desktop = "chat"; - "teams-for-linux".desktop = "chat"; - "Nxplayer.bin".desktop = "remote"; - }; - extraConfig = '' - xsetroot -cursor_name left_ptr - polybar-msg cmd quit - echo "---" | tee -a /tmp/polybar.log - polybar 2>&1 | tee -a /tmp/polybar.log & disown - echo "Bars launched..." - ''; - }; - services.sxhkd = { - enable = true; - keybindings = { - # Terminal emulators - "super + Return" = "wezterm"; - "super + shift + Return" = "xfce4-terminal --drop-down"; - # Launcher - "super + @space" = "rofi -show drun"; - # Shortcuts - "super + shift + q" = "xfce4-session-logout"; - "super + F1" = "xfce4-screensaver-command --lock"; - "super + r" = "bspc desktop -f files && wezterm -e ranger"; - "super + n" = "bspc desktop -f dev && neovide --multigrid --maximized"; - # bspwm hotkeys - "super + Escape" = "pkill -USR1 -x sxhkd"; - "super + alt + {q,r}" = "bspc {quit,wm -r}"; - "super + {_,shift + }q" = "bspc node -{c,k}"; - "super + m" = "bspc desktop -l next"; - # State/Flags - "super + {t,shift + t,v,shift + m}" = "bspc node -t {tiled,pseudo_tiled,floating,fullscreen}"; - # Focus/Scap - "super + {_,shift + }{h,j,k,l}" = "bspc node -{f,s} {west,south,north,east}"; - "super + {_,shift + }{Left,Down,Up,Right}" = "bspc node -{f,s} {west,south,north,east}"; - "super + {_,shift + }{comma,period}" = "bspc {desktop -f,node -d} {prev,next}.local.occupied --follow"; - "super + {_,shift + }c" = "bspc node -f {next,prev}.local.!hidden.window"; - "super + {_,shift + }bracket{left,right}" = "bspc {monitor -f,node -m} {prev,next} --follow"; - "super + {grave,Tab}" = "bspc {node,desktop} -f last"; - "super + {_,shift + }{a,s,d,f,u,i,o,p}" = "bspc {desktop -f,node -d} '{main,dev,browser,files,chat,remote,steam,misc}' --follow"; - # Preselect - "super + ctrl + {h,j,k,l}" = "bspc node -p {west,south,north,east}"; - "super + ctrl + space" = "bspc node -p cancel"; - "super + ctrl + shift + space" = "bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel"; - # Screenshot - "Print" = "flameshot gui"; - # Volume control keys - "XF86AudioMute" = "pamixer -t"; - "XF86AudioRaiseVolume" = "pamixer -i 2"; - "XF86AudioLowerVolume" = "pamixer -d 2"; - "XF86MonBrightnessUp" = "xbacklight +10"; - "XF86MonBrightnessDown" = "xbacklight -10"; - }; - }; -} diff --git a/home/desktop/eww/config/eww.scss b/home/desktop/eww/config/eww.scss deleted file mode 100644 index 0e373714..00000000 --- a/home/desktop/eww/config/eww.scss +++ /dev/null @@ -1 +0,0 @@ -// vim:ft=scss diff --git a/home/desktop/eww/config/eww.yuck b/home/desktop/eww/config/eww.yuck deleted file mode 100644 index 66b0c508..00000000 --- a/home/desktop/eww/config/eww.yuck +++ /dev/null @@ -1,24 +0,0 @@ -(deflisten workspaces :initial "[]" "bash ~/.config/eww/scripts/get-workspaces") -(deflisten current_workspace :initial "1" "bash ~/.config/eww/scripts/get-active-workspace") -(defwidget workspaces [] -(eventbox :onscroll "bash ~/.config/eww/scripts/change-active-workspace {} ${current_workspace}" :class "workspaces-widget" - (box :space-evenly true - (label :text "${workspaces}${current_workspace}" :visible false) - (for workspace in workspaces - (eventbox :onclick "hyprctl dispatch workspace ${workspace.id}" - (box :class "workspace-entry ${workspace.id == current_workspace ? "current" : ""} ${workspace.windows > 0 ? "occupied" : "empty"}" - (label :text "${workspace.id}") - ) - ) - ) - ) - ) -) -(deflisten window :initial "..." "sh ~/.config/eww/scripts/get-window-title") -(defwidget window_w [] - (box - (label :text "${window}" - ) - ) -) -;; vim:ft=yuck diff --git a/home/desktop/eww/config/scripts/change-active-workspace b/home/desktop/eww/config/scripts/change-active-workspace deleted file mode 100644 index 6b09eb9e..00000000 --- a/home/desktop/eww/config/scripts/change-active-workspace +++ /dev/null @@ -1,21 +0,0 @@ -#! /bin/bash -function clamp { - min=$1 - max=$2 - val=$3 - python -c "print(max($min, min($val, $max)))" -} - -direction=$1 -current=$2 -if test "$direction" = "down" -then - target=$(clamp 1 10 $(($current+1))) - echo "jumping to $target" - hyprctl dispatch workspace "$target" -elif test "$direction" = "up" -then - target=$(clamp 1 10 $(($current-1))) - echo "jumping to $target" - hyprctl dispatch workspace "$target" -fi diff --git a/home/desktop/eww/config/scripts/get-active-workspace b/home/desktop/eww/config/scripts/get-active-workspace deleted file mode 100644 index a8886566..00000000 --- a/home/desktop/eww/config/scripts/get-active-workspace +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -hyprctl monitors -j | jq '.[] | select(.focused) | .activeWorkspace.id' - -socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - |\ - stdbuf -o0 awk -F '>>|,' -e '/^workspace>>/ {print $2}' -e '/^focusedmon>>/ {print $3}' diff --git a/home/desktop/eww/config/scripts/get-window-title b/home/desktop/eww/config/scripts/get-window-title deleted file mode 100644 index 15a3ba45..00000000 --- a/home/desktop/eww/config/scripts/get-window-title +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -hyprctl activewindow -j | jq --raw-output .title -socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | stdbuf -o0 awk -F '>>|,' '/^activewindow>>/{print $3}' diff --git a/home/desktop/eww/config/scripts/get-workspaces b/home/desktop/eww/config/scripts/get-workspaces deleted file mode 100644 index e62d9500..00000000 --- a/home/desktop/eww/config/scripts/get-workspaces +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -spaces (){ - WORKSPACE_WINDOWS=$(hyprctl workspaces -j | jq 'map({key: .id | tostring, value: .windows}) | from_entries') - seq 1 10 | jq --argjson windows "$WORKSPACE_WINDOWS" --slurp -Mc 'map(tostring) | map({id: ., windows: ($windows[.]//0)})' -} - -spaces -socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r line; do - spaces -done diff --git a/home/desktop/eww/default.nix b/home/desktop/eww/default.nix deleted file mode 100644 index ac8442b8..00000000 --- a/home/desktop/eww/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{pkgs, ...}: { - home.packages = with pkgs; [ - jq - socat - ]; - programs.eww = { - enable = true; - package = pkgs.eww-wayland; - configDir = ./config; - }; -} diff --git a/home/desktop/picom.nix b/home/desktop/picom.nix deleted file mode 100644 index dd1ed424..00000000 --- a/home/desktop/picom.nix +++ /dev/null @@ -1,16 +0,0 @@ -{...}: { - services.picom = { - enable = true; - backend = "glx"; - activeOpacity = 1.0; - inactiveOpacity = 1.0; - menuOpacity = 1.0; - settings = { - blur = { - method = "dual_kawase"; - strength = 5; - }; - corner-radius = 10; - }; - }; -} diff --git a/home/desktop/polybar/default.nix b/home/desktop/polybar/default.nix deleted file mode 100644 index 44959ae8..00000000 --- a/home/desktop/polybar/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{pkgs, ...}: { - home.packages = with pkgs; [bluez]; - services.polybar = { - enable = true; - config = ./polybar.ini; - script = "${pkgs.polybar}/bin/polybar &"; - }; -} diff --git a/home/desktop/polybar/polybar.ini b/home/desktop/polybar/polybar.ini deleted file mode 100644 index ed1e7481..00000000 --- a/home/desktop/polybar/polybar.ini +++ /dev/null @@ -1,229 +0,0 @@ -;========================================================== -; -; -; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗ -; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗ -; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝ -; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗ -; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║ -; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ -; -; -; To learn more about how to configure Polybar -; go to https://github.com/polybar/polybar -; -; The README contains a lot of information -; -;========================================================== - -[colors] -base = #24273a -mantle = #1e2030 -crust = #181926 - -text = #cad3f5 -subtext0 = #a5adcb -subtext1 = #b8c0e0 - -surface0 = #363a4f -surface1 = #494d64 -surface2 = #5b6078 - -overlay0 = #6e738d -overlay1 = #8087a2 -overlay2 = #939ab7 - - -blue = #8aadf4 -lavender = #b7bdf8 -sapphire = #7dc4e4 -sky = #91d7e3 -teal = #8bd5ca -green = #a6da95 -yellow = #eed49f -peach = #f5a97f -maroon = #ee99a0 -red = #ed8796 -mauve = #c6a0f6 -pink = #f5bde6 -flamingo = #f0c6c6 -rosewater = #f4dbd6 - -transparent = #00000000 - -background = ${colors.base} -background-alt = ${colors.crust} -foreground = ${colors.text} -primary = ${colors.lavender} -secondary = ${colors.mauve} -alert = ${colors.red} -disabled = ${colors.surface0} - -[common] -height = 24pt -radius = 6 -dpi = 0 -font-0 = FiraCode Nerd Font;size=12 -font-1 = Noto Sans;size=12 -line-size = 3pt -background = ${colors.background} -foreground = ${colors.foreground} -padding = 1 -module-margin = 1 -border-size = 4pt -border-color = ${colors.background} -wm-restack = generic -override-redirect = false -separator = | -separator-foreground = ${colors.disabled} -enable-ipc = true - -[settings] -screenchange-reload = true -pseudo-transparency = false - -[bar/main] -inherit = common -width = 100% - -modules-left = launcher time date cpu memory -modules-center = xworkspaces -modules-right = pulseaudio wlan eth backlight battery power-menu - -[module/launcher] -type = custom/text -content = " " -click-left = "rofi -show drun &" - -[module/power-menu] -type = custom/text -content = " " -click-left = "powermenu" - -[module/xworkspaces] -type = internal/xworkspaces - -icon-0 = "main;[a] 󰟀 " -icon-1 = "dev;[s] 󰅴 " -icon-2 = "browser;[d] 󰈹 " -icon-3 = "files;[f] 󰝰 " -icon-4 = "chat;[u] 󰭹 " -icon-5 = "remote;[i]  " -icon-6 = "steam;[o] 󰓓 " -icon-7 = "misc;[p] 󰣙 " -icon-default = "󰣘 " - -label-active = %icon% -label-active-background = ${colors.background-alt} -label-active-underline= ${colors.primary} -label-active-padding = 1 - -label-occupied = %icon% -label-occupied-padding = 1 - -label-urgent = %icon% -label-urgent-background = ${colors.alert} -label-urgent-padding = 1 - -label-empty = %icon% -label-empty-foreground = ${colors.disabled} -label-empty-padding = 1 - -[module/memory] -type = internal/memory -interval = 2 -format-prefix = "󰍛 " -format-prefix-foreground = ${colors.primary} -label = %percentage_used:2%% - -[module/cpu] -type = internal/cpu -interval = 2 -format-prefix = "󰻠 " -format-prefix-foreground = ${colors.primary} -label = %percentage:2%% - -[network-base] -type = internal/network -interval = 5 -format-connected = -format-disconnected = - -[module/wlan] -inherit = network-base -interface-type = wireless -label-connected = "󰖩 %essid%" -label-disconnected = "󰖪 " - -[module/eth] -inherit = network-base -interface-type = wired -label-connected = "󰈁 " -label-disconnected = "󰈂 " - -[module/date] -type = internal/date -interval = 3600 -date = %A %Y-%m-%d -label = %date% -label-foreground = ${colors.primary} - -[module/time] -type = internal/date -interval = 30 -time = %R -label = %time% -label-foreground = ${colors.primary} - -[module/backlight] -type = internal/backlight -card = intel_backlight -format =