diff --git a/flake.nix b/flake.nix index b8120b3..0970e73 100644 --- a/flake.nix +++ b/flake.nix @@ -78,6 +78,9 @@ boot.efiGrub = true; hardware.wireless = true; + hardware.audio = true; + + messengers.personal = true; }; } ]; diff --git a/home/.config/awesome/rc.lua b/home/.config/awesome/rc.lua index 92fd8c3..266af46 100644 --- a/home/.config/awesome/rc.lua +++ b/home/.config/awesome/rc.lua @@ -8,6 +8,7 @@ local awful = require("awful") require("awful.autofocus") -- Widget and layout library local wibox = require("wibox") +local deficient = require("deficient") -- Theme handling library local beautiful = require("beautiful") -- Notification library @@ -45,7 +46,9 @@ end -- {{{ Variable definitions -- Themes define colours, icons, font and wallpapers. -beautiful.init(gears.filesystem.get_themes_dir() .. "default/theme.lua") +if not beautiful.init(require("theme")) then + beautiful.init(gears.filesystem.get_themes_dir() .. "default/theme.lua") +end -- This is used later as the default terminal and editor to run. terminal = "kitty" @@ -83,11 +86,11 @@ awful.layout.layouts = { -- {{{ Menu -- Create a launcher widget and a main menu myawesomemenu = { - { "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 }, + { "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 }, } mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon }, @@ -107,7 +110,14 @@ mykeyboardlayout = awful.widget.keyboardlayout() -- {{{ Wibar -- Create a textclock widget -mytextclock = wibox.widget.textclock() +local mytextclock = wibox.widget { + format = "%a %d/%m/%y %H:%M %b", + widget = wibox.widget.textclock, +} + +local my_brightness = deficient.brightness { +} +local my_volume = deficient.volume_control({}) -- Create a wibox for each screen and add it local taglist_buttons = gears.table.join( @@ -213,6 +223,8 @@ awful.screen.connect_for_each_screen(function(s) mykeyboardlayout, wibox.widget.systray(), mytextclock, + my_brightness.widget, + my_volume.widget, s.mylayoutbox, }, } @@ -250,8 +262,6 @@ globalkeys = gears.table.join( end, {description = "focus previous by index", group = "client"} ), - awful.key({ modkey, }, "w", function () mymainmenu:show() end, - {description = "show main menu", group = "awesome"}), -- Layout manipulation awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end, @@ -313,7 +323,7 @@ globalkeys = gears.table.join( -- Prompt awful.key({ modkey }, "r", function () awful.screen.focused().mypromptbox:run() end, {description = "run prompt", group = "launcher"}), - awful.key({ modkey }, "d", function () awful.spawn("rofi -show drun") end, + awful.key({ modkey }, "d", function () awful.spawn("rofi -show drun -drun-show-actions") end, {description = "run prompt", group = "launcher"}), awful.key({ modkey }, "x", @@ -328,7 +338,15 @@ globalkeys = gears.table.join( {description = "lua execute prompt", group = "awesome"}), -- Menubar awful.key({ modkey }, "p", function() menubar.show() end, - {description = "show the menubar", group = "launcher"}) + {description = "show the menubar", group = "launcher"}), + + -- fns + awful.key({}, "XF86AudioRaiseVolume", function() my_volume:up() end), + awful.key({}, "XF86AudioLowerVolume", function() my_volume:down() end), + awful.key({}, "XF86AudioMute", function() my_volume:toggle() end), + + awful.key({}, "XF86MonBrightnessDown", function() my_brightness:down() end), + awful.key({}, "XF86MonBrightnessUp", function() my_brightness:up() end) ) clientkeys = gears.table.join( diff --git a/home/.config/awesome/theme.lua b/home/.config/awesome/theme.lua new file mode 100644 index 0000000..0d467b6 --- /dev/null +++ b/home/.config/awesome/theme.lua @@ -0,0 +1,109 @@ +-- based on https://github.com/micro-hawk/awesomight/blob/master/dotfiles/.config/awesome/themes/tokyo-night/theme.lua +local theme_assets = require("beautiful.theme_assets") +local xresources = require("beautiful.xresources") +local dpi = xresources.apply_dpi + +local gfs = require("gears.filesystem") +local themes_path = gfs.get_themes_dir() + +local theme = {} +-- theme.dir = os.getenv("HOME") .. "/.config/awesome/" +-- theme.wallpaper = theme.dir .. "/tokyo-night/witcher-wall7.png" +theme.font = "FiraCode Nerd Font Mono 11" +theme.fg_normal = "#DDDDFF" +theme.fg_focus = "#f7768e" +theme.fg_urgent = "#ff9e64" +theme.bg_normal = "#16161e" +theme.temp_color = "#16161e" +theme.bg_focus = "#292e42" +theme.bg_urgent = "#292e42" + + +theme.border_width = 2 +theme.border_normal = theme.bg_urgent +theme.border_focus = theme.fg_focus +theme.border_marked = theme.fg_focus +theme.tasklist_bg_focus = theme.bg_focus + +theme.titlebar_bg_focus = theme.bg_focus +theme.titlebar_bg_normal = theme.bg_normal +theme.titlebar_fg_focus = theme.fg_focus + +local taglist_square_size = dpi(4) +theme.taglist_squares_sel = theme_assets.taglist_squares_sel( + taglist_square_size, theme.fg_focus +) +theme.taglist_squares_unsel = theme_assets.taglist_squares_unsel( + taglist_square_size, theme.fg_normal +) + +-- Variables set for theming notifications: +-- notification_font +-- notification_[bg|fg] +-- notification_[width|height|margin] +-- notification_[border_color|border_width|shape|opacity] + +-- Variables set for theming the menu: +-- menu_[bg|fg]_[normal|focus] +-- menu_[border_color|border_width] +theme.menu_submenu_icon = themes_path.."default/submenu.png" +theme.menu_height = dpi(15) +theme.menu_width = dpi(100) + +-- Define the image to load +theme.titlebar_close_button_normal = themes_path.."default/titlebar/close_normal.png" +theme.titlebar_close_button_focus = themes_path.."default/titlebar/close_focus.png" + +theme.titlebar_minimize_button_normal = themes_path.."default/titlebar/minimize_normal.png" +theme.titlebar_minimize_button_focus = themes_path.."default/titlebar/minimize_focus.png" + +theme.titlebar_ontop_button_normal_inactive = themes_path.."default/titlebar/ontop_normal_inactive.png" +theme.titlebar_ontop_button_focus_inactive = themes_path.."default/titlebar/ontop_focus_inactive.png" +theme.titlebar_ontop_button_normal_active = themes_path.."default/titlebar/ontop_normal_active.png" +theme.titlebar_ontop_button_focus_active = themes_path.."default/titlebar/ontop_focus_active.png" + +theme.titlebar_sticky_button_normal_inactive = themes_path.."default/titlebar/sticky_normal_inactive.png" +theme.titlebar_sticky_button_focus_inactive = themes_path.."default/titlebar/sticky_focus_inactive.png" +theme.titlebar_sticky_button_normal_active = themes_path.."default/titlebar/sticky_normal_active.png" +theme.titlebar_sticky_button_focus_active = themes_path.."default/titlebar/sticky_focus_active.png" + +theme.titlebar_floating_button_normal_inactive = themes_path.."default/titlebar/floating_normal_inactive.png" +theme.titlebar_floating_button_focus_inactive = themes_path.."default/titlebar/floating_focus_inactive.png" +theme.titlebar_floating_button_normal_active = themes_path.."default/titlebar/floating_normal_active.png" +theme.titlebar_floating_button_focus_active = themes_path.."default/titlebar/floating_focus_active.png" + +theme.titlebar_maximized_button_normal_inactive = themes_path.."default/titlebar/maximized_normal_inactive.png" +theme.titlebar_maximized_button_focus_inactive = themes_path.."default/titlebar/maximized_focus_inactive.png" +theme.titlebar_maximized_button_normal_active = themes_path.."default/titlebar/maximized_normal_active.png" +theme.titlebar_maximized_button_focus_active = themes_path.."default/titlebar/maximized_focus_active.png" + +-- theme.wallpaper = themes_path.."default/background.png" + +-- You can use your own layout icons like this: +theme.layout_fairh = themes_path.."default/layouts/fairhw.png" +theme.layout_fairv = themes_path.."default/layouts/fairvw.png" +theme.layout_floating = themes_path.."default/layouts/floatingw.png" +theme.layout_magnifier = themes_path.."default/layouts/magnifierw.png" +theme.layout_max = themes_path.."default/layouts/maxw.png" +theme.layout_fullscreen = themes_path.."default/layouts/fullscreenw.png" +theme.layout_tilebottom = themes_path.."default/layouts/tilebottomw.png" +theme.layout_tileleft = themes_path.."default/layouts/tileleftw.png" +theme.layout_tile = themes_path.."default/layouts/tilew.png" +theme.layout_tiletop = themes_path.."default/layouts/tiletopw.png" +theme.layout_spiral = themes_path.."default/layouts/spiralw.png" +theme.layout_dwindle = themes_path.."default/layouts/dwindlew.png" +theme.layout_cornernw = themes_path.."default/layouts/cornernww.png" +theme.layout_cornerne = themes_path.."default/layouts/cornernew.png" +theme.layout_cornersw = themes_path.."default/layouts/cornersww.png" +theme.layout_cornerse = themes_path.."default/layouts/cornersew.png" + +-- Generate Awesome icon: +theme.awesome_icon = theme_assets.awesome_icon( + theme.menu_height, theme.bg_focus, theme.fg_focus +) + +-- Define the icon theme for application icons. If not set then the icons +-- from /usr/share/icons and /usr/share/icons/hicolor will be used. +theme.icon_theme = nil + +return theme diff --git a/home/.config/kitty/kitty.conf b/home/.config/kitty/kitty.conf index 1c69da0..9803364 100644 --- a/home/.config/kitty/kitty.conf +++ b/home/.config/kitty/kitty.conf @@ -1,4 +1,4 @@ -font_family Fira Code Nerd Font Mono +font_family family="FiraCode Nerd Font Mono" map alt+1 first_window map alt+2 second_window diff --git a/home/.config/nvim/base.vim b/home/.config/nvim/base.vim index aa41efe..479068f 100644 --- a/home/.config/nvim/base.vim +++ b/home/.config/nvim/base.vim @@ -39,7 +39,6 @@ if system('uname -a') =~ '\' \ } endif -" colorscheme tokyonight-night if exists(':GuiRenderLigatures') GuiRenderLigatures 1 endif @@ -49,6 +48,8 @@ if exists(':GuiFont') endif function s:post_load() + colorscheme tokyonight-night + if exists(':NERDTreeToggle') map :NERDTreeToggle autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif diff --git a/home/.config/rofi/config b/home/.config/rofi/config new file mode 100644 index 0000000..2c07fc0 --- /dev/null +++ b/home/.config/rofi/config @@ -0,0 +1 @@ +rofi.theme: ~/.config/rofi/simple-tokyonight.rasi diff --git a/home/.config/rofi/simple-tokyonight.rasi b/home/.config/rofi/simple-tokyonight.rasi new file mode 100644 index 0000000..025dc73 --- /dev/null +++ b/home/.config/rofi/simple-tokyonight.rasi @@ -0,0 +1,116 @@ +# See https://github.com/newmanls/rofi-themes-collection/tree/master (GPLv3) +* { + font: "Iosevka Nerd Font Medium 11"; + + bg0 : #1a1b26; + bg1 : #1f2335; + bg2 : #24283b; + bg3 : #414868; + fg0 : #c0caf5; + fg1 : #a9b1d6; + fg2 : #737aa2; + red : #f7768e; + green : #9ece6a; + yellow : #e0af68; + blue : #7aa2f7; + magenta : #9a7ecc; + cyan : #4abaaf; + + accent: @red; + urgent: @yellow; + + background-color : transparent; + text-color : @fg0; + + margin : 0; + padding : 0; + spacing : 0; +} + +element-icon, element-text, scrollbar { + cursor: pointer; +} + +window { + location : northwest; + width : 280px; + x-offset : 4px; + y-offset : 26px; + + background-color: @bg1; + border: 1px; + border-color: @bg3; + border-radius: 6px; +} + +inputbar { + spacing : 8px; + padding : 4px 8px; + children : [ icon-search, entry ]; + + background-color: @bg0; +} + +icon-search, entry, element-icon, element-text { + vertical-align: 0.5; +} + +icon-search { + expand : false; + filename : "search-symbolic"; + size : 14px; +} + +textbox { + padding : 4px 8px; + background-color : @bg2; +} + +listview { + padding : 4px 0px; + lines : 12; + columns : 1; + scrollbar : true; + fixed-height : false; + dynamic : true; +} + +element { + padding : 4px 8px; + spacing : 8px; +} + +element normal urgent { + text-color: @urgent; +} + +element normal active { + text-color: @accent; +} + +element alternate active { + text-color: @accent; +} + +element selected { + text-color : @bg1; + background-color : @accent; +} + +element selected urgent { + background-color: @urgent; +} + +element-icon { + size: 0.8em; +} + +element-text { + text-color: inherit; +} + +scrollbar { + handle-width : 4px; + handle-color : @fg2; + padding : 0 4px; +} diff --git a/nix/hardware/audio.nix b/nix/hardware/audio.nix new file mode 100644 index 0000000..b751e4f --- /dev/null +++ b/nix/hardware/audio.nix @@ -0,0 +1,21 @@ +{ pkgs +, lib +, rootPath +, config +, ... +}: +let + cfg = config.kp2pml30; +in lib.mkIf cfg.hardware.audio { + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + environment.systemPackages = with pkgs; [ + alsa-utils + acpid + ]; +} diff --git a/nix/hardware/common.nix b/nix/hardware/common.nix index c0d8e2c..88de799 100644 --- a/nix/hardware/common.nix +++ b/nix/hardware/common.nix @@ -10,11 +10,13 @@ options.kp2pml30.hardware = { wireless = lib.mkEnableOption ""; + audio = lib.mkEnableOption ""; }; imports = [ ./efiGrub.nix ./wireless.nix + ./audio.nix ]; config = { diff --git a/nix/personal/default.nix b/nix/personal/default.nix index a061d8c..56ea9db 100644 --- a/nix/personal/default.nix +++ b/nix/personal/default.nix @@ -17,6 +17,10 @@ in { kitty = lib.mkEnableOption ""; opera = lib.mkEnableOption ""; steam = lib.mkEnableOption ""; + messengers = { + personal = lib.mkEnableOption ""; + work = lib.mkEnableOption ""; + }; }; imports = [ @@ -53,6 +57,7 @@ in { fishPlugins.grc fishPlugins.bass + python312 # needed for bass grc ]; @@ -67,6 +72,7 @@ in { "nvidia-settings" "nvidia-persistenced" "opera" + "discord-ptb" ]; }; } diff --git a/nix/personal/graphical/default.nix b/nix/personal/graphical/default.nix index 7fb8670..87ecebb 100644 --- a/nix/personal/graphical/default.nix +++ b/nix/personal/graphical/default.nix @@ -13,6 +13,9 @@ in { ./opera.nix ./steam.nix + + ./messengers.nix + ./messengers-work.nix ]; fonts.packages = with pkgs; [ diff --git a/nix/personal/graphical/messengers-work.nix b/nix/personal/graphical/messengers-work.nix new file mode 100644 index 0000000..f17b4b2 --- /dev/null +++ b/nix/personal/graphical/messengers-work.nix @@ -0,0 +1,10 @@ +{ pkgs +, lib +, rootPath +, config +, ... +}: +let + cfg = config.kp2pml30; +in lib.mkIf cfg.messengers.personal { +} diff --git a/nix/personal/graphical/messengers.nix b/nix/personal/graphical/messengers.nix new file mode 100644 index 0000000..baabaf0 --- /dev/null +++ b/nix/personal/graphical/messengers.nix @@ -0,0 +1,15 @@ +{ pkgs +, lib +, rootPath +, config +, ... +}: +let + cfg = config.kp2pml30; +in lib.mkIf cfg.messengers.personal { + users.users.${cfg.username}.packages = with pkgs; [ + discord-ptb + telegram-desktop + signal-desktop + ]; +} diff --git a/nix/personal/graphical/x.nix b/nix/personal/graphical/x.nix index 29180f8..b358766 100644 --- a/nix/personal/graphical/x.nix +++ b/nix/personal/graphical/x.nix @@ -31,12 +31,23 @@ in lib.mkIf cfg.xserver { environment.systemPackages = with pkgs; [ xclip + brightnessctl ]; home-manager.users.${cfg.username} = { - home.file.".config/awesome/rc.lua" = { source = rootPath + "/home/.config/awesome/rc.lua"; }; programs.rofi = { enable = true; }; + home.file.".config/rofi" = { source = rootPath + "/home/.config/rofi"; recursive = true; }; + + home.file.".config/awesome/rc.lua" = { source = rootPath + "/home/.config/awesome/rc.lua"; }; + home.file.".config/awesome/theme.lua" = { source = rootPath + "/home/.config/awesome/theme.lua"; }; + home.file.".config/awesome/deficient" = { + source = builtins.fetchGit { + url = "https://github.com/deficient/deficient.git"; + rev = "22ad2bea198f0c231afac0b7197d9b4eb6d80da3"; + }; + recursive = true; + }; }; } diff --git a/nix/server/nginx.nix b/nix/server/nginx.nix index 2e390d1..b18c619 100644 --- a/nix/server/nginx.nix +++ b/nix/server/nginx.nix @@ -30,12 +30,12 @@ in lib.mkIf cfg.nginx { listen = [ { addr = "0.0.0.0"; port = 80; } - { addr = "0.0.0.0"; port = 444; ssl = true; } + # { addr = "0.0.0.0"; port = 444; ssl = true; } ]; locations."/" = { root = cfg.sitePath; - tryFiles = "$uri $uri/ index.html"; + tryFiles = "$uri $uri/ /index.html"; }; }; diff --git a/vps/iptables.erb b/vps/iptables.erb deleted file mode 100644 index 0378b72..0000000 --- a/vps/iptables.erb +++ /dev/null @@ -1,49 +0,0 @@ -% # run it like this: `erb ports='[]' iptables.erb | iptables-restore` -% # NOTE: it discards docker iptable rules -*filter - --N DOCKER-USER --N DOCKER-ISOLATION-STAGE-1 - -# don't restrict output at all --A OUTPUT -j ACCEPT - -# allow all loopback --A INPUT -i lo -j ACCEPT --A FORWARD -i lo -j ACCEPT - -# allow all established --A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT --A DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT - -# allow wireguard --A INPUT -i wg0 -j ACCEPT --A FORWARD -i wg0 -j ACCEPT --A DOCKER-USER -i wg0 -j ACCEPT - -# allow all docker --A DOCKER-USER -i docker0 -j DOCKER-ISOLATION-STAGE-1 - -% require 'json' -% prts = [22, 80, 443] + JSON.parse(ports) -# apply it with `iptables-restore < ./iptables` - -# allow all loopback --A INPUT -i lo -j ACCEPT - -# custom ports -% prts.each { |port| -% ['tcp', 'udp'].each { |proto| --A FORWARD -p <%= proto %> --dport <%= port %> -j ACCEPT --A INPUT -p <%= proto %> --dport <%= port %> -j ACCEPT --A DOCKER-USER -p <%= proto %> -m conntrack --ctorigdstport <%= port %> --ctdir ORIGINAL -j ACCEPT -% } - -% } -% -# disallow all other --A INPUT -j DROP --A FORWARD -j DROP --A DOCKER-USER -j DROP - -COMMIT diff --git a/vps/vpn/make-server.sh b/vps/vpn/make-server.sh deleted file mode 100755 index ec111c1..0000000 --- a/vps/vpn/make-server.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/usr/bin/env bash - -set -e - -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) - -HOST="" -PORT="" -GENKEY=false - -function show_help { - echo "wireguard configurator" - echo " --host host-name" - echo " --port port" - echo " [--gen-key]" -} - -while [ $# -ne 0 ] -do - ARG="$1" - shift - case "$ARG" in - --help) - show_help - exit 0 - ;; - --host) - HOST="$1" - shift - ;; - --port) - PORT="$1" - shift - ;; - --gen-keys) - GENKEY=true - ;; - *) - echo "unknown argument $ARG" - show_help - exit 1 - ;; - esac -done - -echo "Parsed:" -echo " --host $HOST" -echo " --port $PORTI" - -if [ "$HOST" == "" ] -then - echo "host not set" - show_help - exit 1 -fi - -if [ "$PORT" == "" ] -then - echo "port not set" - show_help - exit 1 -fi - -if [ ! -f .gitignore ] -then - echo "INFO creating gitignore" - touch .gitignore -fi - -if ! grep -Pq '^/key$' .gitignore -then - echo "INFO adding key to .gitignore" - echo "/key" >> .gitignore -fi - -if ! grep -Pq '^/wg0\.conf$' .gitignore -then - echo "INFO adding wg0.conf to .gitignore" - echo "/wg0.conf" >> .gitignore -fi - -if [ "$GENKEY" == "true" ] -then - touch key - chmod 600 key - wg genkey > key - wg pubkey < key > key.pub -fi - -touch wg0.conf -chmod 600 wg0.conf -KEY="$(cat key)" -erb "private_key=$KEY" port="$PORT" "$SCRIPT_DIR/wg0.conf.erb" > wg0.conf -KEY="" - -PUBKEY="$(cat key.pub)" - -echo "" -echo "Run following to start wireguard:" -echo " wg-quick up ./wg0.conf" -echo "You can add peers as follows:" -echo " wg set wg0 peer allowed-ips IP" -echo "" -echo "Client's configuration is" -echo "==================================" -cat <<-EOF -[Interface] -Address = 10.30.30.@@/32 -PrivateKey = -DNS = 10.30.30.1 - -[Peer] -PublicKey = $PUBKEY -Endpoint = $HOST:$PORT -AllowedIPs = 10.30.30.0/24 -PersistentKeepalive = 25 -EOF -echo "=================================="