diff --git a/flake.nix b/flake.nix index eb875647..d1581253 100644 --- a/flake.nix +++ b/flake.nix @@ -60,6 +60,10 @@ overlays = import ./overlays { inherit inputs; }; + homeManagerModules.default = import ./modules/home-manager; + + nixosModules.default = import ./modules/nixos; + nixosConfigurations = { lemp11 = nixpkgs.lib.nixosSystem { specialArgs = specialArgs // { @@ -139,7 +143,5 @@ ]; }; }; - - nixosModules = import ./modules { lib = nixpkgs.lib; }; }; } diff --git a/home/common/default.nix b/home/common/default.nix new file mode 100644 index 00000000..76b2a760 --- /dev/null +++ b/home/common/default.nix @@ -0,0 +1,7 @@ +{ outputs, ... }: + +{ + imports = [ + outputs.homeManagerModules.default + ]; +} diff --git a/home/opdavies/PW05CH3L.nix b/home/opdavies/PW05CH3L.nix new file mode 100644 index 00000000..215f4d10 --- /dev/null +++ b/home/opdavies/PW05CH3L.nix @@ -0,0 +1,32 @@ +{ + imports = [ ../common ]; + + homeManagerModules = { + cli = { + direnv.enable = true; + fzf.enable = true; + + git = { + enable = true; + + user.emailAddress = "oliver.davies@tfw.wales"; + }; + + node.enable = true; + ranger.enable = true; + starship.enable = true; + tmux.enable = true; + tmux-sessionizer.enable = true; + zsh.enable = true; + }; + + coding = { + neovim.enable = true; + phpactor.enable = true; + }; + }; + + xdg.configFile."pam-gnupg".text = '' + C0D940F9A390F286FCAAE8439D501171E39D0A47 + ''; +} diff --git a/home/opdavies/lemp11.nix b/home/opdavies/lemp11.nix new file mode 100644 index 00000000..617b1ab6 --- /dev/null +++ b/home/opdavies/lemp11.nix @@ -0,0 +1,5 @@ +{ + imports = [ ../common ]; + + homeManagerModules.cli.zsh.enable = true; +} diff --git a/home/opdavies/nixedo.nix b/home/opdavies/nixedo.nix new file mode 100644 index 00000000..f53a457f --- /dev/null +++ b/home/opdavies/nixedo.nix @@ -0,0 +1,11 @@ +{ + imports = [ ../common ]; + + homeManagerModules = { + cli = { + fzf.enable = true; + starship.enable = true; + zsh.enable = true; + }; + }; +} diff --git a/home/opdavies/t480.nix b/home/opdavies/t480.nix new file mode 100644 index 00000000..e8549598 --- /dev/null +++ b/home/opdavies/t480.nix @@ -0,0 +1,43 @@ +{ + imports = [ ../common ]; + + homeManagerModules = { + cli = { + bluetuith.enable = true; + direnv.enable = true; + fzf.enable = true; + + git = { + enable = true; + + user.emailAddress = "oliver@oliverdavies.uk"; + }; + + node.enable = true; + notes.enable = true; + ranger.enable = true; + starship.enable = true; + tmux.enable = true; + tmux-sessionizer.enable = true; + zsh.enable = true; + }; + + coding = { + neovim.enable = true; + phpactor.enable = true; + }; + + desktop = { + firefox.enable = true; + flameshot.enable = true; + gtk.enable = true; + mpv.enable = true; + qutebrowser.enable = true; + }; + }; + + xdg.configFile."pam-gnupg".text = '' + 098EE055DAD2B9CB68154C6759DD38292D2273B6 + 1E21B58D69FFEFAD077F152A50FEA938A3413F50 + ''; +} diff --git a/home/opdavies/t490.nix b/home/opdavies/t490.nix new file mode 100644 index 00000000..2a89c647 --- /dev/null +++ b/home/opdavies/t490.nix @@ -0,0 +1,3 @@ +{ + imports = [ ../common ]; +} diff --git a/hosts/PW05CH3L/configuration.nix b/hosts/PW05CH3L/configuration.nix index 93bf861f..34f97dac 100644 --- a/hosts/PW05CH3L/configuration.nix +++ b/hosts/PW05CH3L/configuration.nix @@ -1,37 +1,21 @@ -{ inputs, username, ... }: - -let - git = { - name = "Oliver Davies"; - emailAddress = "oliver.davies@tfw.wales"; - }; -in { - imports = with inputs.self.nixosModules; [ - editor-nvim - mixins-common - mixins-direnv - mixins-docker - mixins-fzf - mixins-node - mixins-notes - mixins-phpactor - mixins-ranger - mixins-scripts - mixins-starship - mixins-tmux - mixins-zsh + imports = [ + ../common - users-opdavies - - (import ../../modules/mixins/git.nix { inherit git; }) + ../../users/opdavies.nix ./modules/wiki.nix ]; + nixosModules = { + cli = { + docker.enable = true; + }; + }; + wsl = { enable = true; - defaultUser = username; + defaultUser = "opdavies"; }; home-manager.users.opdavies.home.sessionVariables.WAYLAND_DISPLAY = ""; diff --git a/modules/mixins/common/default.nix b/hosts/common/default.nix similarity index 97% rename from modules/mixins/common/default.nix rename to hosts/common/default.nix index 3c9a4f9f..196f05ec 100644 --- a/modules/mixins/common/default.nix +++ b/hosts/common/default.nix @@ -12,7 +12,11 @@ { imports = [ + ./users + inputs.home-manager.nixosModules.home-manager + + outputs.nixosModules.default ]; nix = { diff --git a/modules/mixins/common/home.nix b/hosts/common/home.nix similarity index 96% rename from modules/mixins/common/home.nix rename to hosts/common/home.nix index 23426d12..c2073f9b 100644 --- a/modules/mixins/common/home.nix +++ b/hosts/common/home.nix @@ -27,6 +27,10 @@ let ; in { + imports = [ + outputs.homeManagerModules.default + ]; + home.username = "opdavies"; home.homeDirectory = "/home/${config.home.username}"; diff --git a/hosts/common/users/default.nix b/hosts/common/users/default.nix new file mode 100644 index 00000000..65787561 --- /dev/null +++ b/hosts/common/users/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./opdavies.nix + ]; +} diff --git a/hosts/common/users/opdavies.nix b/hosts/common/users/opdavies.nix new file mode 100644 index 00000000..556baaca --- /dev/null +++ b/hosts/common/users/opdavies.nix @@ -0,0 +1,7 @@ +{ config, ... }: + +{ + users.users.opdavies = { }; + + home-manager.users.opdavies = import ../../../home/opdavies/${config.networking.hostName}.nix; +} diff --git a/hosts/lemp11/configuration.nix b/hosts/lemp11/configuration.nix index 3173ef1d..527dfb2f 100644 --- a/hosts/lemp11/configuration.nix +++ b/hosts/lemp11/configuration.nix @@ -1,61 +1,20 @@ -{ inputs, pkgs, ... }: +{ pkgs, ... }: { - imports = with inputs.self.nixosModules; [ + imports = [ + ../common ./hardware-configuration.nix + ./programs.nix + ./services.nix - mixins-avahi - mixins-bluetooth - mixins-common - mixins-zram - mixins-zsh - - users-opdavies - users-eric + ../../users/opdavies.nix + ../../users/eric.nix ]; - services = { - auto-cpufreq.enable = true; - gvfs.enable = true; - openssh.enable = true; - power-profiles-daemon.enable = false; - thermald.enable = true; - - pipewire = { - enable = true; - - alsa = { - enable = true; - support32Bit = true; - }; - - pulse.enable = true; - }; - - printing.enable = true; - pulseaudio.enable = false; - - xserver = { - enable = true; - - xkb = { - layout = "gb"; - variant = ""; - }; - - desktopManager.cinnamon.enable = true; - displayManager.lightdm.enable = true; - }; - }; - - programs = { - firefox = { - enable = true; - languagePacks = [ "en-GB" ]; - preferences = { - "intl.accept_languages" = "en-GB, en"; - "intl.regional_prefs.use_os_locales" = true; - }; + nixosModules = { + core = { + bluetooth.enable = true; + zram.enable = true; }; }; diff --git a/hosts/lemp11/programs.nix b/hosts/lemp11/programs.nix new file mode 100644 index 00000000..4da8fd00 --- /dev/null +++ b/hosts/lemp11/programs.nix @@ -0,0 +1,13 @@ +{ + programs = { + firefox = { + enable = true; + + languagePacks = [ "en-GB" ]; + preferences = { + "intl.accept_languages" = "en-GB, en"; + "intl.regional_prefs.use_os_locales" = true; + }; + }; + }; +} diff --git a/hosts/lemp11/services.nix b/hosts/lemp11/services.nix new file mode 100644 index 00000000..0a219ba0 --- /dev/null +++ b/hosts/lemp11/services.nix @@ -0,0 +1,35 @@ +{ + services = { + auto-cpufreq.enable = true; + gvfs.enable = true; + openssh.enable = true; + power-profiles-daemon.enable = false; + thermald.enable = true; + + pipewire = { + enable = true; + + alsa = { + enable = true; + support32Bit = true; + }; + + pulse.enable = true; + }; + + printing.enable = true; + pulseaudio.enable = false; + + xserver = { + enable = true; + + xkb = { + layout = "gb"; + variant = ""; + }; + + desktopManager.cinnamon.enable = true; + displayManager.lightdm.enable = true; + }; + }; +} diff --git a/hosts/nixedo/configuration.nix b/hosts/nixedo/configuration.nix index 3c6a0328..a295bbb4 100644 --- a/hosts/nixedo/configuration.nix +++ b/hosts/nixedo/configuration.nix @@ -2,35 +2,21 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ inputs, ... }: - { - imports = with inputs.self.nixosModules; [ + imports = [ + ../common ./hardware-configuration.nix + ./modules ./secrets.nix - mixins-avahi - mixins-common - mixins-fzf - mixins-openssh - mixins-podman - mixins-starship - mixins-zsh - - users-opdavies - - ./modules/acme.nix - ./modules/audiobookshelf.nix - ./modules/cloudflared.nix - ./modules/containers - ./modules/forgejo.nix - ./modules/immich.nix - ./modules/jellyfin.nix - ./modules/nginx - ./modules/paperless.nix + ../../users/opdavies.nix ]; - programs.dconf.enable = true; + nixosModules = { + core.openssh.enable = true; + cli.podman.enable = true; + desktop.dconf.enable = true; + }; services.logind.lidSwitchExternalPower = "ignore"; diff --git a/hosts/nixedo/modules/default.nix b/hosts/nixedo/modules/default.nix new file mode 100644 index 00000000..c7553e34 --- /dev/null +++ b/hosts/nixedo/modules/default.nix @@ -0,0 +1,13 @@ +{ + imports = [ + ./acme.nix + ./audiobookshelf.nix + ./cloudflared.nix + ./containers + ./forgejo.nix + ./immich.nix + ./jellyfin.nix + ./nginx + ./paperless.nix + ]; +} diff --git a/hosts/t480/configuration.nix b/hosts/t480/configuration.nix index baff0d60..2d2442cf 100644 --- a/hosts/t480/configuration.nix +++ b/hosts/t480/configuration.nix @@ -1,61 +1,35 @@ -{ inputs, pkgs, ... }: +{ pkgs, ... }: -let - git = { - name = "Oliver Davies"; - emailAddress = "oliver@oliverdavies.uk"; - }; -in { - imports = with inputs.self.nixosModules; [ + imports = [ + ../common + ./hardware-configuration.nix + ./modules ./secrets.nix + ./services.nix - editor-nvim - mixins-avahi - mixins-bluetooth - mixins-common - mixins-direnv - mixins-firefox - mixins-flameshot - mixins-fonts - mixins-fzf - mixins-gnupg - mixins-gtk - mixins-qutebrowser - mixins-mpv - mixins-node - mixins-notes - mixins-phpactor - mixins-pipewire - mixins-ranger - mixins-screenkey - mixins-scripts - mixins-starship - mixins-thunar - mixins-tmux - mixins-zram - mixins-zsh - profiles-dwm - profiles-xbanish - - (import ../../modules/mixins/git.nix { inherit git; }) - - (import ../../modules/mixins/kanata.nix { - devices = [ - "/dev/input/event1" - ]; - }) - - users-opdavies - - ./modules/cron.nix - ./modules/neomutt.nix - ./modules/newsboat - ./modules/ollama.nix - ./modules/wiki.nix + ../../users/opdavies.nix ]; + nixosModules = { + core = { + bluetooth.enable = true; + openssh.enable = true; + pipewire.enable = true; + xbanish.enable = true; + zram.enable = true; + }; + + desktop = { + dconf.enable = true; + dwm.enable = true; + fonts.enable = true; + st.enable = true; + thunar.enable = true; + }; + }; + boot = { loader = { systemd-boot = { @@ -118,35 +92,4 @@ in zeroad zoom-us ]; - - services = { - auto-cpufreq.enable = true; - gvfs.enable = true; - power-profiles-daemon.enable = false; - printing.enable = true; - pulseaudio.enable = false; - throttled.enable = true; - thermald.enable = true; - upower.enable = true; - - xserver = { - enable = true; - - displayManager.startx.enable = true; - - xkb = { - layout = "gb"; - variant = ""; - }; - }; - }; - - programs.dconf.enable = true; - - home-manager.users.opdavies = { - xdg.configFile."pam-gnupg".text = '' - 098EE055DAD2B9CB68154C6759DD38292D2273B6 - 1E21B58D69FFEFAD077F152A50FEA938A3413F50 - ''; - }; } diff --git a/hosts/t480/modules/default.nix b/hosts/t480/modules/default.nix new file mode 100644 index 00000000..4d7442c0 --- /dev/null +++ b/hosts/t480/modules/default.nix @@ -0,0 +1,9 @@ +{ + imports = [ + ./cron.nix + ./neomutt.nix + ./newsboat + ./ollama.nix + ./wiki.nix + ]; +} diff --git a/hosts/t480/services.nix b/hosts/t480/services.nix new file mode 100644 index 00000000..9a222dd5 --- /dev/null +++ b/hosts/t480/services.nix @@ -0,0 +1,23 @@ +{ + services = { + auto-cpufreq.enable = true; + gvfs.enable = true; + power-profiles-daemon.enable = false; + printing.enable = true; + pulseaudio.enable = false; + throttled.enable = true; + thermald.enable = true; + upower.enable = true; + + xserver = { + enable = true; + + displayManager.startx.enable = true; + + xkb = { + layout = "gb"; + variant = ""; + }; + }; + }; +} diff --git a/hosts/t490/configuration.nix b/hosts/t490/configuration.nix index 0a66ab5b..e83c838f 100644 --- a/hosts/t490/configuration.nix +++ b/hosts/t490/configuration.nix @@ -1,20 +1,27 @@ -{ inputs, pkgs, ... }: +{ pkgs, ... }: { - imports = with inputs.self.nixosModules; [ + imports = [ + ../common + ./hardware-configuration.nix ./hardware.nix - ./programs.nix ./secrets.nix ./services ./users.nix - mixins-common - mixins-zram - - users-opdavies + ../../users/opdavies.nix ]; + nixosModules = { + core = { + bluetooth.enable = true; + zram.enable = true; + }; + + desktop.dconf.enable = true; + }; + boot = { loader = { systemd-boot = { diff --git a/hosts/t490/programs.nix b/hosts/t490/programs.nix deleted file mode 100644 index f3cfe26d..00000000 --- a/hosts/t490/programs.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ pkgs, ... }: - -{ - programs = { - dconf.enable = true; - }; -} diff --git a/modules/default.nix b/modules/default.nix deleted file mode 100644 index d55ad57c..00000000 --- a/modules/default.nix +++ /dev/null @@ -1,57 +0,0 @@ -# Based on https://github.com/MatthewCroughan/nixcfg/blob/afab322e6da20cc038d8577dd4a365673702d183/modules/default.nix. -# Autoloads files within modules/ and makes them available by their module -# type and name, e.g. `mixins-zsh`, `editor-nvim` and `users-opdavies` when -# imported with `inputs.self.nixosModules`. - -{ lib }: - -let - inherit (builtins) - attrNames - filter - listToAttrs - map - readDir - toString - ; - - inherit (lib) - filterAttrs - foldAttrs - hasSuffix - mapAttrsToList - nameValuePair - removeSuffix - zipListsWith - ; - - inherit (lib.filesystem) listFilesRecursive; - - generateModules = - folder: prefix: - - let - findSuffix = suffix: dir: (filter (x: (hasSuffix suffix (toString x))) (listFilesRecursive dir)); - - allNixFiles = findSuffix ".nix" folder; - - allModuleNames = map (removeSuffix ".nix") (map baseNameOf allNixFiles); - - zippedList = ( - zipListsWith (x: y: nameValuePair (prefix + "-" + x) (import y)) allModuleNames allNixFiles - ); - in - listToAttrs zippedList; - generateModulesAuto = - root: - let - moduleFolderNames = attrNames (filterAttrs (n: v: v == "directory") (readDir (toString root))); - moduleFolderPaths = map (x: (toString root) + "/" + x) moduleFolderNames; - - zippedList = listToAttrs ( - zipListsWith (x: y: nameValuePair x y) moduleFolderNames moduleFolderPaths - ); - in - foldAttrs (item: acc: item) { } (mapAttrsToList (n: v: generateModules v n) zippedList); -in -generateModulesAuto ./. diff --git a/modules/editor/nvim.nix b/modules/editor/nvim.nix deleted file mode 100644 index 99f48bc7..00000000 --- a/modules/editor/nvim.nix +++ /dev/null @@ -1,185 +0,0 @@ -{ - home-manager.users.opdavies = - { pkgs, ... }: - { - programs.neovim = - let - php = pkgs.php82; - phpPackages = pkgs.php82Packages; - in - { - enable = true; - - plugins = with pkgs.vimPlugins; [ - comment-nvim - conf-vim - edit-alternate-vim - gitsigns-nvim - harpoon2 - mini-nvim - nvim-web-devicons - phpactor - refactoring-nvim - standard-vim - undotree - vim-caser - vim-nix - vim-pasta - vim-repeat - vim-sleuth - vim-textobj-indent - vim-textobj-user - vim-textobj-xmlattr - vim-unimpaired - - # Testing - vim-test - vimux - - # Git - vim-fugitive - - # Debugging - nvim-dap - nvim-dap-ui - nvim-dap-virtual-text - - # Treesitter - (pkgs.vimPlugins.nvim-treesitter.withPlugins ( - plugins: with plugins; [ - bash - comment - css - csv - dockerfile - gitattributes - gitignore - go - html - javascript - json - kdl - lua - luadoc - make - markdown - markdown_inline - nix - php - phpdoc - query - rst - scss - sql - terraform - twig - typescript - vim - vimdoc - vue - xml - yaml - ] - )) - nvim-treesitter-textobjects - - # LSP, linting and formatting - conform-nvim - lsp-status-nvim - nvim-lint - nvim-lspconfig - - # Completion - cmp-buffer - cmp-calc - cmp-cmdline - cmp-nvim-lsp - cmp-path - cmp-treesitter - cmp_luasnip - lspkind-nvim - nvim-cmp - - # Snippets - friendly-snippets - luasnip - - # Telescope - plenary-nvim - popup-nvim - telescope-frecency-nvim - telescope-fzf-native-nvim - telescope-live-grep-args-nvim - telescope-nvim - telescope-ui-select-nvim - - # Databases - vim-dadbod - vim-dadbod-ui - vim-dadbod-completion - - # Themes - catppuccin-nvim - ]; - - extraPackages = with pkgs; [ - # Languages - nodePackages.typescript - nodejs-slim - php - - # Language servers - bash-language-server - dockerfile-language-server-nodejs - emmet-language-server - gopls - lua-language-server - lua54Packages.luacheck - marksman - nixd - phpactor - tailwindcss-language-server - terraform-ls - typescript-language-server - vscode-langservers-extracted - vue-language-server - yaml-language-server - - # Formatters - black - eslint_d - nixfmt-rfc-style - nodePackages.prettier - stylua - yamlfmt - - # Tools - hadolint - html-tidy - mariadb - nodePackages.jsonlint - nodePackages.markdownlint-cli - phpPackages.php-codesniffer - phpPackages.phpstan - proselint - ripgrep - shellcheck - yamllint - ]; - }; - - xdg.configFile.nvim = { - source = ./config; - recursive = true; - }; - - home.file.".markdownlint.yaml".text = '' - default: true - - line-length: false - - no-duplicate-heading: - siblings_only: true - ''; - }; -} diff --git a/modules/mixins/bluetooth.nix b/modules/home-manager/cli/bluetuith.nix similarity index 58% rename from modules/mixins/bluetooth.nix rename to modules/home-manager/cli/bluetuith.nix index e2fc375c..f07399d0 100644 --- a/modules/mixins/bluetooth.nix +++ b/modules/home-manager/cli/bluetuith.nix @@ -1,15 +1,23 @@ -{ pkgs, ... }: - { - hardware.bluetooth.enable = true; + config, + lib, + pkgs, + ... +}: - services.blueman.enable = true; +with lib; - environment.systemPackages = with pkgs; [ - bluetuith - ]; +let + cfg = config.homeManagerModules.cli.bluetuith; +in +{ + options.homeManagerModules.cli.bluetuith.enable = mkEnableOption "Enable bluetuith"; + + config = mkIf cfg.enable { + home.packages = with pkgs; [ + bluetuith + ]; - home-manager.users.opdavies = { xdg.configFile."bluetuith/bluetuith.conf" = { text = '' { diff --git a/modules/home-manager/cli/default.nix b/modules/home-manager/cli/default.nix new file mode 100644 index 00000000..4f66690d --- /dev/null +++ b/modules/home-manager/cli/default.nix @@ -0,0 +1,16 @@ +{ + imports = [ + ./bluetuith.nix + ./direnv.nix + ./fzf.nix + ./git.nix + ./node.nix + ./notes.nix + ./ranger.nix + ./scripts + ./starship.nix + ./tmux.nix + ./tmux-sessionizer.nix + ./zsh + ]; +} diff --git a/modules/home-manager/cli/direnv.nix b/modules/home-manager/cli/direnv.nix new file mode 100644 index 00000000..cc8d0988 --- /dev/null +++ b/modules/home-manager/cli/direnv.nix @@ -0,0 +1,21 @@ +{ config, lib, ... }: + +with lib; + +let + cfg = config.homeManagerModules.cli.direnv; +in +{ + options.homeManagerModules.cli.direnv.enable = mkEnableOption "Enable direnv"; + + config = mkIf cfg.enable { + programs.direnv = { + enable = true; + enableZshIntegration = true; + + nix-direnv.enable = true; + + silent = true; + }; + }; +} diff --git a/modules/home-manager/cli/fzf.nix b/modules/home-manager/cli/fzf.nix new file mode 100644 index 00000000..9e61d277 --- /dev/null +++ b/modules/home-manager/cli/fzf.nix @@ -0,0 +1,21 @@ +{ config, lib, ... }: + +with lib; + +let + cfg = config.homeManagerModules.cli.fzf; +in +{ + options.homeManagerModules.cli.fzf.enable = mkEnableOption "Enable fzf"; + + config = mkIf cfg.enable { + programs.fzf = { + enable = true; + enableZshIntegration = true; + }; + + home.sessionVariables = { + FZF_DEFAULT_OPTS = "--reverse"; + }; + }; +} diff --git a/modules/home-manager/cli/git.nix b/modules/home-manager/cli/git.nix new file mode 100644 index 00000000..9d9496c0 --- /dev/null +++ b/modules/home-manager/cli/git.nix @@ -0,0 +1,178 @@ +{ + config, + lib, + pkgs, + ... +}: + +with lib; + +let + cfg = config.homeManagerModules.cli.git; +in +{ + options.homeManagerModules.cli.git = { + enable = mkEnableOption "Enable git"; + + user = mkOption { + type = types.submodule { + options = { + emailAddress = mkOption { + description = "User email address."; + type = types.str; + apply = + x: + assert builtins.match "^[^@]+@[^@]+\\.[^@]+$" x != null; + x; + }; + }; + }; + }; + }; + + config = mkIf cfg.enable { + home.file."${config.xdg.configHome}/git/message".text = '' + + + # Description + # + # - Why is this change necessary? + # - How does it address the issue? + # - What side effects does this change have? + # + # For breaking changes, uncomment the following line and describe the change: + # + # BREAKING CHANGE: + # + # + # Add any issue IDs or commit SHAs that this commit references: + # + # Refs: + + ''; + + programs = { + git = { + enable = true; + userName = "Oliver Davies"; + userEmail = cfg.user.emailAddress; + + aliases = { + aa = "add --all"; + assume = "update-index --assume-unchanged"; + assumed = "!git ls-files -v | grep '^[hsmrck?]' | cut -c 3-"; + b = "branch"; + blame = "blame -w -C -C -C"; + browse = "!gh repo view --web"; + ca = "commit --amend --verbose"; + car = "commit --amend --no-edit"; + cl = "!hub clone"; + co = "checkout"; + compare = "!hub compare"; + current-branch = "rev-parse --abbrev-ref HEAD"; + dc = "diff --color --word-diff --cached"; + df = "diff --color --word-diff"; + dup = "!git checkout develop && git fetch origin && echo && git sl develop..origin/develop && echo && git pull --quiet && git checkout -"; + fixup = "commit --fixup"; + issues = "!gh issue list --web"; + mup = "!git master-to-main-wrapper checkout %BRANCH% && git fetch origin && echo && git sl %BRANCH%..origin/%BRANCH% && echo && git pull --quiet && git checkout -"; + no-ff = "merge --no-ff"; + pl = "pull"; + prune = "remote prune origin"; + ps = "push"; + pulls = "!gh pr list --web"; + rbc = "rebase --continue"; + rdup = "!git dup && git rebase develop"; + remotes = "remote -v"; + repush = "!git pull --rebase && git push"; + ri = "rebase --interactive"; + rid = "!git rebase -i $(git merge-base develop HEAD)"; + rim = "!git rebase -i $(git master-to-main-wrapper merge-base %BRANCH% HEAD)"; + rip = "!git rebase -i $(git merge-base production HEAD)"; + ris = "!git rebase -i $(git merge-base staging HEAD)"; + riu = "!git rebase -i $(git rev-parse --abbrev-ref --symbolic-full-name @{u})"; + rmup = "!git mup && git master-to-main-wrapper rebase %BRANCH%"; + sl = "log --oneline --decorate -20"; + sla = "log --oneline --decorate --graph --all -20"; + slap = "log --oneline --decorate --graph --all"; + slp = "log --oneline --decorate"; + stash = "stash --included-untracked"; + unassume = "update-index --no-assume-unchanged"; + uncommit = "reset --soft HEAD^"; + unstage = "reset"; + update = "!git fetch --all --jobs=4 --prune --progress && git rebase --autostash --stat"; + upstream = "rev-parse --abbrev-ref --symbolic-full-name @{u}"; + ureset = "!git reset --hard $(git upstream)"; + worktrees = "worktree list"; + }; + + ignores = [ + "/.ddev/providers/" + "/.direnv/" + "/.ignored/" + "/.issue-id" + "/.phpactor.json" + "/notes" + "/todo" + ]; + + extraConfig = { + branch = { + autosetupmerge = true; + autosetuprebase = "always"; + sort = "-committerdate"; + }; + + checkout.defaultRemote = "origin"; + color.ui = true; + column.ui = "auto"; + commit.template = "${config.xdg.configHome}/git/message"; + + core = { + editor = "nvim"; + excludesFile = "~/.config/git/ignore"; + }; + + diff.tool = "vimdiff"; + fetch.prune = true; + gpg.format = "ssh"; + grep.lineNumber = true; + help.autocorrect = "1"; + init.defaultBranch = "main"; + + maintenance = { + auto = false; + strategy = "incremental"; + }; + + merge.ff = "only"; + + push = { + autoSetupRemote = true; + default = "upstream"; + }; + + pull = { + ff = "only"; + rebase = true; + }; + + rebase = { + autosquash = true; + autostash = true; + }; + + user.signingkey = "~/.ssh/id_rsa.pub"; + }; + }; + }; + + home = { + packages = with pkgs; [ nixpkgs-2411.git-instafix ]; + + sessionVariables = { + GIT_INSTAFIX_UPSTREAM = "origin/main"; + }; + }; + }; +} diff --git a/modules/home-manager/cli/node.nix b/modules/home-manager/cli/node.nix new file mode 100644 index 00000000..443719da --- /dev/null +++ b/modules/home-manager/cli/node.nix @@ -0,0 +1,25 @@ +{ config, lib, ... }: + +with lib; + +let + cfg = config.homeManagerModules.cli.node; + + inherit (config.xdg) configHome dataHome stateHome; +in +{ + options.homeManagerModules.cli.node.enable = mkEnableOption "Enable node"; + + config = mkIf cfg.enable { + xdg.configFile."${config.home.sessionVariables.NPM_CONFIG_USERCONFIG}".text = '' + cache=${configHome}/npm + init-module=${configHome}/npm/config/npm-init.js + logs-dir=${stateHome}/npm/logs + prefix=${dataHome}/npm + ''; + + home.sessionVariables = { + NPM_CONFIG_USERCONFIG = "${configHome}/npm/npmrc"; + }; + }; +} diff --git a/modules/home-manager/cli/notes.nix b/modules/home-manager/cli/notes.nix new file mode 100644 index 00000000..1125daab --- /dev/null +++ b/modules/home-manager/cli/notes.nix @@ -0,0 +1,30 @@ +{ + config, + lib, + pkgs, + ... +}: + +with lib; + +let + cfg = config.homeManagerModules.cli.notes; +in +{ + options.homeManagerModules.cli.notes.enable = mkEnableOption "Enable notes"; + + config = mkIf cfg.enable { + xdg = { + enable = true; + userDirs.enable = true; + }; + + home = { + packages = with pkgs; [ notes ]; + + sessionVariables = { + NOTES_DIRECTORY = "${config.xdg.userDirs.documents}/wiki/notes"; + }; + }; + }; +} diff --git a/modules/home-manager/cli/ranger.nix b/modules/home-manager/cli/ranger.nix new file mode 100644 index 00000000..0b3d1a59 --- /dev/null +++ b/modules/home-manager/cli/ranger.nix @@ -0,0 +1,14 @@ +{ config, lib, ... }: + +with lib; + +let + cfg = config.homeManagerModules.cli.ranger; +in +{ + options.homeManagerModules.cli.ranger.enable = mkEnableOption "Enable ranger"; + + config = mkIf cfg.enable { + programs.ranger.enable = true; + }; +} diff --git a/modules/mixins/scripts/default.nix b/modules/home-manager/cli/scripts/default.nix similarity index 77% rename from modules/mixins/scripts/default.nix rename to modules/home-manager/cli/scripts/default.nix index 448d89a9..2da9de18 100644 --- a/modules/mixins/scripts/default.nix +++ b/modules/home-manager/cli/scripts/default.nix @@ -1,5 +1,5 @@ { - home-manager.users.opdavies.home = { + home = { sessionPath = [ "$HOME/.local/bin" ]; file.".local/bin" = { diff --git a/modules/mixins/scripts/scripts/create-script b/modules/home-manager/cli/scripts/scripts/create-script similarity index 100% rename from modules/mixins/scripts/scripts/create-script rename to modules/home-manager/cli/scripts/scripts/create-script diff --git a/modules/mixins/scripts/scripts/git-abort b/modules/home-manager/cli/scripts/scripts/git-abort similarity index 100% rename from modules/mixins/scripts/scripts/git-abort rename to modules/home-manager/cli/scripts/scripts/git-abort diff --git a/modules/mixins/scripts/scripts/git-bare-clone b/modules/home-manager/cli/scripts/scripts/git-bare-clone similarity index 100% rename from modules/mixins/scripts/scripts/git-bare-clone rename to modules/home-manager/cli/scripts/scripts/git-bare-clone diff --git a/modules/mixins/scripts/scripts/git-continue b/modules/home-manager/cli/scripts/scripts/git-continue similarity index 100% rename from modules/mixins/scripts/scripts/git-continue rename to modules/home-manager/cli/scripts/scripts/git-continue diff --git a/modules/mixins/scripts/scripts/git-sync b/modules/home-manager/cli/scripts/scripts/git-sync similarity index 100% rename from modules/mixins/scripts/scripts/git-sync rename to modules/home-manager/cli/scripts/scripts/git-sync diff --git a/modules/mixins/scripts/scripts/git-up b/modules/home-manager/cli/scripts/scripts/git-up similarity index 100% rename from modules/mixins/scripts/scripts/git-up rename to modules/home-manager/cli/scripts/scripts/git-up diff --git a/modules/mixins/scripts/scripts/import-gzip-database b/modules/home-manager/cli/scripts/scripts/import-gzip-database similarity index 100% rename from modules/mixins/scripts/scripts/import-gzip-database rename to modules/home-manager/cli/scripts/scripts/import-gzip-database diff --git a/modules/mixins/scripts/scripts/main-or-master-branch b/modules/home-manager/cli/scripts/scripts/main-or-master-branch similarity index 100% rename from modules/mixins/scripts/scripts/main-or-master-branch rename to modules/home-manager/cli/scripts/scripts/main-or-master-branch diff --git a/modules/mixins/scripts/scripts/mounter b/modules/home-manager/cli/scripts/scripts/mounter similarity index 100% rename from modules/mixins/scripts/scripts/mounter rename to modules/home-manager/cli/scripts/scripts/mounter diff --git a/modules/mixins/scripts/scripts/move-firefox-screenshots b/modules/home-manager/cli/scripts/scripts/move-firefox-screenshots similarity index 100% rename from modules/mixins/scripts/scripts/move-firefox-screenshots rename to modules/home-manager/cli/scripts/scripts/move-firefox-screenshots diff --git a/modules/mixins/scripts/scripts/new-drupal-module b/modules/home-manager/cli/scripts/scripts/new-drupal-module similarity index 100% rename from modules/mixins/scripts/scripts/new-drupal-module rename to modules/home-manager/cli/scripts/scripts/new-drupal-module diff --git a/modules/mixins/scripts/scripts/setbg b/modules/home-manager/cli/scripts/scripts/setbg similarity index 100% rename from modules/mixins/scripts/scripts/setbg rename to modules/home-manager/cli/scripts/scripts/setbg diff --git a/modules/mixins/scripts/scripts/start-traefik b/modules/home-manager/cli/scripts/scripts/start-traefik similarity index 100% rename from modules/mixins/scripts/scripts/start-traefik rename to modules/home-manager/cli/scripts/scripts/start-traefik diff --git a/modules/mixins/scripts/scripts/stop-all-docker-containers b/modules/home-manager/cli/scripts/scripts/stop-all-docker-containers similarity index 100% rename from modules/mixins/scripts/scripts/stop-all-docker-containers rename to modules/home-manager/cli/scripts/scripts/stop-all-docker-containers diff --git a/modules/mixins/scripts/scripts/stop-traefik b/modules/home-manager/cli/scripts/scripts/stop-traefik similarity index 100% rename from modules/mixins/scripts/scripts/stop-traefik rename to modules/home-manager/cli/scripts/scripts/stop-traefik diff --git a/modules/mixins/scripts/scripts/tag-release b/modules/home-manager/cli/scripts/scripts/tag-release similarity index 100% rename from modules/mixins/scripts/scripts/tag-release rename to modules/home-manager/cli/scripts/scripts/tag-release diff --git a/modules/mixins/scripts/scripts/unmounter b/modules/home-manager/cli/scripts/scripts/unmounter similarity index 100% rename from modules/mixins/scripts/scripts/unmounter rename to modules/home-manager/cli/scripts/scripts/unmounter diff --git a/modules/mixins/scripts/scripts/update-all-git-repos b/modules/home-manager/cli/scripts/scripts/update-all-git-repos similarity index 100% rename from modules/mixins/scripts/scripts/update-all-git-repos rename to modules/home-manager/cli/scripts/scripts/update-all-git-repos diff --git a/modules/home-manager/cli/starship.nix b/modules/home-manager/cli/starship.nix new file mode 100644 index 00000000..da07eaf7 --- /dev/null +++ b/modules/home-manager/cli/starship.nix @@ -0,0 +1,187 @@ +{ config, lib, ... }: + +with lib; + +let + cfg = config.homeManagerModules.cli.starship; +in +{ + options.homeManagerModules.cli.starship.enable = mkEnableOption "Enable starship"; + + config = mkIf cfg.enable { + programs.starship = + let + inherit (builtins) concatStringsSep; + in + { + enable = true; + enableZshIntegration = true; + + settings = { + add_newline = false; + + # https://starship.rs/config/#prompt + format = concatStringsSep "" [ + "\n" + "$username" + "$hostname" + "$directory" + "$vcsh" + "$git_branch" + "$git_status" + "$git_metrics" + "$docker_context" + "$nodejs" + "$php" + "$terraform" + "$nix_shell" + "$direnv" + "\${custom.mob}" + "$memory_usage" + "$cmd_duration" + "$lua" + "$status" + "$character" + ]; + + cmd_duration.disabled = true; + direnv.disabled = false; + directory.format = "[$path]($style) "; + git_status.disabled = true; + nix_shell.disabled = true; + nodejs.disabled = true; + php.disabled = true; + username.disabled = true; + + custom = { + mob = { + command = "echo $MOB_TIMER_ROOM"; + format = "[($output)]($style) "; + when = "[[ -v MOB_TIMER_ROOM ]]"; + }; + }; + + # https://starship.rs/presets/plain-text + aws.symbol = "aws "; + azure.symbol = "az "; + bun.symbol = "bun "; + c.symbol = "C "; + character = { + success_symbol = "[>](bold green)"; + error_symbol = "[x](bold red)"; + vimcmd_symbol = "[<](bold green)"; + }; + cobol.symbol = "cobol "; + conda.symbol = "conda "; + crystal.symbol = "cr "; + cmake.symbol = "cmake "; + daml.symbol = "daml "; + dart.symbol = "dart "; + deno.symbol = "deno "; + dotnet.symbol = ".NET "; + directory.read_only = " ro"; + docker_context.symbol = "docker "; + elixir.symbol = "exs "; + elm.symbol = "elm "; + fennel.symbol = "fnl "; + fossil_branch.symbol = "fossil "; + gcloud.symbol = "gcp "; + git_branch.symbol = "git "; + git_commit.tag_symbol = " tag "; + git_status = { + ahead = ">"; + behind = "<"; + diverged = "<>"; + renamed = "r"; + deleted = "x"; + }; + gleam.symbol = "gleam "; + golang.symbol = "go "; + gradle.symbol = "gradle "; + guix_shell.symbol = "guix "; + hg_branch.symbol = "hg "; + java.symbol = "java "; + julia.symbol = "jl "; + kotlin.symbol = "kt "; + lua.symbol = "lua "; + nodejs.symbol = "nodejs "; + memory_usage.symbol = "memory "; + meson.symbol = "meson "; + nats.symbol = "nats "; + nim.symbol = "nim "; + nix_shell.symbol = "nix "; + ocaml.symbol = "ml "; + opa.symbol = "opa "; + os.symbols = { + AIX = "aix "; + Alpaquita = "alq "; + AlmaLinux = "alma "; + Alpine = "alp "; + Amazon = "amz "; + Android = "andr "; + Arch = "rch "; + Artix = "atx "; + CentOS = "cent "; + Debian = "deb "; + DragonFly = "dfbsd "; + Emscripten = "emsc "; + EndeavourOS = "ndev "; + Fedora = "fed "; + FreeBSD = "fbsd "; + Garuda = "garu "; + Gentoo = "gent "; + HardenedBSD = "hbsd "; + Illumos = "lum "; + Kali = "kali "; + Linux = "lnx "; + Mabox = "mbox "; + Macos = "mac "; + Manjaro = "mjo "; + Mariner = "mrn "; + MidnightBSD = "mid "; + Mint = "mint "; + NetBSD = "nbsd "; + NixOS = "nix "; + OpenBSD = "obsd "; + OpenCloudOS = "ocos "; + openEuler = "oeul "; + openSUSE = "osuse "; + OracleLinux = "orac "; + Pop = "pop "; + Raspbian = "rasp "; + Redhat = "rhl "; + RedHatEnterprise = "rhel "; + RockyLinux = "rky "; + Redox = "redox "; + Solus = "sol "; + SUSE = "suse "; + Ubuntu = "ubnt "; + Ultramarine = "ultm "; + Unknown = "unk "; + Void = "void "; + Windows = "win "; + }; + package.symbol = "pkg "; + perl.symbol = "pl "; + php.symbol = "php "; + pijul_channel.symbol = "pijul "; + pulumi.symbol = "pulumi "; + purescript.symbol = "purs "; + python.symbol = "py "; + quarto.symbol = "quarto "; + raku.symbol = "raku "; + ruby.symbol = "rb "; + rust.symbol = "rs "; + scala.symbol = "scala "; + spack.symbol = "spack "; + solidity.symbol = "solidity "; + status.symbol = "[x](bold red) "; + sudo.symbol = "sudo "; + swift.symbol = "swift "; + typst.symbol = "typst "; + terraform.symbol = "terraform "; + zig.symbol = "zig "; + }; + }; + }; +} diff --git a/modules/home-manager/cli/tmux-sessionizer.nix b/modules/home-manager/cli/tmux-sessionizer.nix new file mode 100644 index 00000000..d94063c9 --- /dev/null +++ b/modules/home-manager/cli/tmux-sessionizer.nix @@ -0,0 +1,46 @@ +{ + config, + lib, + pkgs, + ... +}: + +with lib; + +let + cfg = config.homeManagerModules.cli.tmux-sessionizer; +in +{ + options.homeManagerModules.cli.tmux-sessionizer.enable = mkEnableOption "Enable tmux-sessionizer"; + + config = mkIf cfg.enable { + home.packages = with pkgs; [ + tmux-sessionizer + ]; + + xdg.configFile."tmux-sessionizer/default".source = "${ + pkgs.writeShellApplication { + name = ".tmux-sessionizer"; + + runtimeInputs = with pkgs; [ + tmux + ]; + + text = '' + set +o errexit + set +o nounset + + if [[ "$PWD" == "${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/os" || "$PWD" == "${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/personal" ]]; then + clear + + return + fi + + tmux new-window -d -n scratch + nvim . + clear + ''; + } + }/bin/.tmux-sessionizer"; + }; +} diff --git a/modules/home-manager/cli/tmux.nix b/modules/home-manager/cli/tmux.nix new file mode 100644 index 00000000..d535e977 --- /dev/null +++ b/modules/home-manager/cli/tmux.nix @@ -0,0 +1,97 @@ +{ + config, + lib, + pkgs, + ... +}: + +with lib; + +let + cfg = config.homeManagerModules.cli.tmux; +in +{ + options.homeManagerModules.cli.tmux.enable = mkEnableOption "Enable tmux"; + + config = mkIf cfg.enable { + programs.tmux = { + enable = true; + + terminal = "tmux-256color"; + + extraConfig = '' + set-option -g status-keys "vi" + set-option -sa terminal-features "''${TERM}:RGB" + + bind -n S-Left resize-pane -L 2 + bind -n S-Right resize-pane -R 2 + bind -n S-Down resize-pane -D 1 + bind -n S-Up resize-pane -U 1 + + bind -n C-Left resize-pane -L 10 + bind -n C-Right resize-pane -R 10 + bind -n C-Down resize-pane -D 5 + bind -n C-Up resize-pane -U 5 + + # Status line customisation + set-option -g status-left "" + set-option -g status-right " #{session_name}" + set-option -g status-right-length 100 + set-option -g status-style "fg=#7C7D83 bg=default" + set-option -g window-status-activity-style none + set-option -g window-status-current-style "fg=#E9E9EA" + + bind c new-window -c "#{pane_current_path}" + + set -g base-index 1 + set -g pane-base-index 1 + set -g renumber-windows on + + # Break a pane into a new window. + bind-key b break-pane -d + bind-key J command-prompt -p "join pane from: " "join-pane -h -s '%%'" + + bind-key C-j choose-tree + + set-window-option -g mode-keys vi + bind -T copy-mode-vi v send-keys -X begin-selection + bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard' + + bind C-j split-window -v "tmux list-sessions | sed -E 's/:.*$//' | grep -v \"^$(tmux display-message -p '#S')\$\" | fzf --reverse | xargs tmux switch-client -t" + + bind-key K run-shell 'tmux switch-client -n \; kill-session -t "$(tmux display-message -p "#S")" || tmux kill-session' + + # Allow clearing screen with ctrl-l by using C-l + bind C-l send-keys "C-l" + bind C-k send-keys "C-k" + + # Enable mouse support. + setw -g mouse on + + # Remove delay when switching Vim modes. + set -sg escape-time 0 + + set-option -g pane-active-border-style "fg=#1f2335" + set-option -g pane-border-style "fg=#1f2335" + + # Vim-like pane navigation. + bind ^ last-window + bind h select-pane -L + bind j select-pane -D + bind k select-pane -U + bind l select-pane -R + + bind-key -r f run-shell "tmux new-window tmux-sessionizer" + + bind-key -r D new-window -c "#{pane_current_path}" "[[ -e TODO.md ]] && nvim TODO.md || nvim ~/Documents/wiki/todo.txt" + bind-key -r N new-window "notes" + bind-key -r W split-window -h -c ~/Documents/wiki "nvim '+Telescope find_files'" + ''; + + plugins = with pkgs.tmuxPlugins; [ + vim-tmux-navigator + yank + ]; + }; + }; +} diff --git a/modules/mixins/zsh/abbreviations.nix b/modules/home-manager/cli/zsh/abbreviations.nix similarity index 100% rename from modules/mixins/zsh/abbreviations.nix rename to modules/home-manager/cli/zsh/abbreviations.nix diff --git a/modules/mixins/zsh/aliases.nix b/modules/home-manager/cli/zsh/aliases.nix similarity index 100% rename from modules/mixins/zsh/aliases.nix rename to modules/home-manager/cli/zsh/aliases.nix diff --git a/modules/home-manager/cli/zsh/default.nix b/modules/home-manager/cli/zsh/default.nix new file mode 100644 index 00000000..93fa5b1d --- /dev/null +++ b/modules/home-manager/cli/zsh/default.nix @@ -0,0 +1,115 @@ +{ + config, + lib, + pkgs, + ... +}: + +with lib; + +let + cfg = config.homeManagerModules.cli.zsh; +in +{ + options.homeManagerModules.cli.zsh.enable = mkEnableOption "Enable zsh"; + + config = mkIf cfg.enable { + programs.zsh = { + enable = true; + enableCompletion = true; + syntaxHighlighting.enable = true; + + zsh-abbr = { + enable = true; + + abbreviations = import ./abbreviations.nix; + globalAbbreviations = import ./global-abbreviations.nix; + }; + + dotDir = ".config/zsh"; + + shellAliases = (import ./aliases.nix { inherit config; }); + + localVariables = { + ABBR_SET_EXPANSION_CURSOR = 1; + }; + + profileExtra = '' + if [[ -z "$DISPLAY" ]] && [[ "$(tty)" == "/dev/tty1" ]]; then + exec startx &>/dev/null + fi + ''; + + initExtra = '' + background() { + for ((i=2;i<=$#;i++)); do + ''${@[1]} ''${@[$i]} &> /dev/null & + done + } + + # suffix + alias -s gz="tar -tf" + alias -s {html,HTML}="background zsh" + alias -s {jpg,JPG,png,PNG}="background okular" + alias -s {pdf,PDF}="background okular" + alias -s {zip,ZIP}="unzip -l" + + git() { + case "$1" in + clone) + shift + + local repo_url="$1" + local repo_path="''${2:-}" + + if [ -n "$TARGET_DIR" ]; then + command git clone "$repo_url" "$repo_path" + else + command git clone "$repo_url" + repo_path=$(basename "$repo_url" .git) + fi + + ${pkgs.tmux-sessionizer}/bin/tmux-sessionizer "$repo_path" + ;; + + root) + shift + + local ROOT="$(${pkgs.git}/bin/git rev-parse --show-toplevel 2> /dev/null || echo -n .)" + + if [[ $# == 0 ]]; then + cd "''${ROOT}" + else + (cd "''${ROOT}" && eval "''${@}") + fi + ;; + + *) + ${pkgs.git}/bin/git "''${@}" + ;; + esac + } + + mbsync() { + ${pkgs.isync}/bin/mbsync --config "${config.xdg.configHome}/isync/mbsyncrc" "''${@}" + } + + ttyper() { + command ${pkgs.ttyper}/bin/ttyper --language english1000 --words 50 "''${@}" + } + + yt-dlp() { + command yt-dlp --paths ~/Videos "$@" + } + + bindkey -s ^f "tmux-sessionizer\n" + bindkey -s ^v "nvim\n" + + setopt auto_cd + setopt auto_pushd + setopt pushd_ignore_dups + setopt pushdminus + ''; + }; + }; +} diff --git a/modules/mixins/zsh/global-abbreviations.nix b/modules/home-manager/cli/zsh/global-abbreviations.nix similarity index 100% rename from modules/mixins/zsh/global-abbreviations.nix rename to modules/home-manager/cli/zsh/global-abbreviations.nix diff --git a/modules/home-manager/coding/default.nix b/modules/home-manager/coding/default.nix new file mode 100644 index 00000000..a8d773c7 --- /dev/null +++ b/modules/home-manager/coding/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./neovim + ./phpactor + ]; +} diff --git a/modules/editor/config/.gitignore b/modules/home-manager/coding/neovim/config/.gitignore similarity index 100% rename from modules/editor/config/.gitignore rename to modules/home-manager/coding/neovim/config/.gitignore diff --git a/modules/editor/config/after/ftplugin/gitcommit.lua b/modules/home-manager/coding/neovim/config/after/ftplugin/gitcommit.lua similarity index 100% rename from modules/editor/config/after/ftplugin/gitcommit.lua rename to modules/home-manager/coding/neovim/config/after/ftplugin/gitcommit.lua diff --git a/modules/editor/config/after/ftplugin/markdown.lua b/modules/home-manager/coding/neovim/config/after/ftplugin/markdown.lua similarity index 100% rename from modules/editor/config/after/ftplugin/markdown.lua rename to modules/home-manager/coding/neovim/config/after/ftplugin/markdown.lua diff --git a/modules/editor/config/after/ftplugin/netrw.lua b/modules/home-manager/coding/neovim/config/after/ftplugin/netrw.lua similarity index 100% rename from modules/editor/config/after/ftplugin/netrw.lua rename to modules/home-manager/coding/neovim/config/after/ftplugin/netrw.lua diff --git a/modules/editor/config/after/ftplugin/php.lua b/modules/home-manager/coding/neovim/config/after/ftplugin/php.lua similarity index 100% rename from modules/editor/config/after/ftplugin/php.lua rename to modules/home-manager/coding/neovim/config/after/ftplugin/php.lua diff --git a/modules/editor/config/after/ftplugin/rst.lua b/modules/home-manager/coding/neovim/config/after/ftplugin/rst.lua similarity index 100% rename from modules/editor/config/after/ftplugin/rst.lua rename to modules/home-manager/coding/neovim/config/after/ftplugin/rst.lua diff --git a/modules/editor/config/after/ftplugin/term.vim b/modules/home-manager/coding/neovim/config/after/ftplugin/term.vim similarity index 100% rename from modules/editor/config/after/ftplugin/term.vim rename to modules/home-manager/coding/neovim/config/after/ftplugin/term.vim diff --git a/modules/editor/config/after/ftplugin/text.lua b/modules/home-manager/coding/neovim/config/after/ftplugin/text.lua similarity index 100% rename from modules/editor/config/after/ftplugin/text.lua rename to modules/home-manager/coding/neovim/config/after/ftplugin/text.lua diff --git a/modules/editor/config/autoload/opdavies.vim b/modules/home-manager/coding/neovim/config/autoload/opdavies.vim similarity index 100% rename from modules/editor/config/autoload/opdavies.vim rename to modules/home-manager/coding/neovim/config/autoload/opdavies.vim diff --git a/modules/editor/config/init.lua b/modules/home-manager/coding/neovim/config/init.lua similarity index 100% rename from modules/editor/config/init.lua rename to modules/home-manager/coding/neovim/config/init.lua diff --git a/modules/editor/config/lua/opdavies/globals.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/globals.lua similarity index 100% rename from modules/editor/config/lua/opdavies/globals.lua rename to modules/home-manager/coding/neovim/config/lua/opdavies/globals.lua diff --git a/modules/editor/config/lua/opdavies/init.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/init.lua similarity index 100% rename from modules/editor/config/lua/opdavies/init.lua rename to modules/home-manager/coding/neovim/config/lua/opdavies/init.lua diff --git a/modules/editor/config/lua/opdavies/keymaps.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/keymaps.lua similarity index 100% rename from modules/editor/config/lua/opdavies/keymaps.lua rename to modules/home-manager/coding/neovim/config/lua/opdavies/keymaps.lua diff --git a/modules/editor/config/lua/opdavies/lsp/handlers.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/lsp/handlers.lua similarity index 100% rename from modules/editor/config/lua/opdavies/lsp/handlers.lua rename to modules/home-manager/coding/neovim/config/lua/opdavies/lsp/handlers.lua diff --git a/modules/editor/config/lua/opdavies/lsp/init.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/lsp/init.lua similarity index 100% rename from modules/editor/config/lua/opdavies/lsp/init.lua rename to modules/home-manager/coding/neovim/config/lua/opdavies/lsp/init.lua diff --git a/modules/editor/config/lua/opdavies/options.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/options.lua similarity index 100% rename from modules/editor/config/lua/opdavies/options.lua rename to modules/home-manager/coding/neovim/config/lua/opdavies/options.lua diff --git a/modules/editor/config/lua/opdavies/snippets/javascript.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/javascript.lua similarity index 100% rename from modules/editor/config/lua/opdavies/snippets/javascript.lua rename to modules/home-manager/coding/neovim/config/lua/opdavies/snippets/javascript.lua diff --git a/modules/editor/config/lua/opdavies/snippets/lua.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/lua.lua similarity index 100% rename from modules/editor/config/lua/opdavies/snippets/lua.lua rename to modules/home-manager/coding/neovim/config/lua/opdavies/snippets/lua.lua diff --git a/modules/editor/config/lua/opdavies/snippets/php.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/php.lua similarity index 100% rename from modules/editor/config/lua/opdavies/snippets/php.lua rename to modules/home-manager/coding/neovim/config/lua/opdavies/snippets/php.lua diff --git a/modules/editor/config/lua/opdavies/snippets/rst.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/rst.lua similarity index 100% rename from modules/editor/config/lua/opdavies/snippets/rst.lua rename to modules/home-manager/coding/neovim/config/lua/opdavies/snippets/rst.lua diff --git a/modules/editor/config/lua/opdavies/snippets/scss.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/scss.lua similarity index 100% rename from modules/editor/config/lua/opdavies/snippets/scss.lua rename to modules/home-manager/coding/neovim/config/lua/opdavies/snippets/scss.lua diff --git a/modules/editor/config/lua/opdavies/snippets/twig.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/twig.lua similarity index 100% rename from modules/editor/config/lua/opdavies/snippets/twig.lua rename to modules/home-manager/coding/neovim/config/lua/opdavies/snippets/twig.lua diff --git a/modules/editor/config/lua/opdavies/snippets/yaml.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/snippets/yaml.lua similarity index 100% rename from modules/editor/config/lua/opdavies/snippets/yaml.lua rename to modules/home-manager/coding/neovim/config/lua/opdavies/snippets/yaml.lua diff --git a/modules/editor/config/lua/opdavies/telescope/multigrep.lua b/modules/home-manager/coding/neovim/config/lua/opdavies/telescope/multigrep.lua similarity index 100% rename from modules/editor/config/lua/opdavies/telescope/multigrep.lua rename to modules/home-manager/coding/neovim/config/lua/opdavies/telescope/multigrep.lua diff --git a/modules/editor/config/plugin/autocommands.lua b/modules/home-manager/coding/neovim/config/plugin/autocommands.lua similarity index 100% rename from modules/editor/config/plugin/autocommands.lua rename to modules/home-manager/coding/neovim/config/plugin/autocommands.lua diff --git a/modules/editor/config/plugin/colorscheme.lua b/modules/home-manager/coding/neovim/config/plugin/colorscheme.lua similarity index 100% rename from modules/editor/config/plugin/colorscheme.lua rename to modules/home-manager/coding/neovim/config/plugin/colorscheme.lua diff --git a/modules/editor/config/plugin/comment.lua b/modules/home-manager/coding/neovim/config/plugin/comment.lua similarity index 100% rename from modules/editor/config/plugin/comment.lua rename to modules/home-manager/coding/neovim/config/plugin/comment.lua diff --git a/modules/editor/config/plugin/completion.lua b/modules/home-manager/coding/neovim/config/plugin/completion.lua similarity index 100% rename from modules/editor/config/plugin/completion.lua rename to modules/home-manager/coding/neovim/config/plugin/completion.lua diff --git a/modules/editor/config/plugin/conform.lua b/modules/home-manager/coding/neovim/config/plugin/conform.lua similarity index 100% rename from modules/editor/config/plugin/conform.lua rename to modules/home-manager/coding/neovim/config/plugin/conform.lua diff --git a/modules/editor/config/plugin/dap.lua b/modules/home-manager/coding/neovim/config/plugin/dap.lua similarity index 100% rename from modules/editor/config/plugin/dap.lua rename to modules/home-manager/coding/neovim/config/plugin/dap.lua diff --git a/modules/editor/config/plugin/edit_alternate.lua b/modules/home-manager/coding/neovim/config/plugin/edit_alternate.lua similarity index 100% rename from modules/editor/config/plugin/edit_alternate.lua rename to modules/home-manager/coding/neovim/config/plugin/edit_alternate.lua diff --git a/modules/editor/config/plugin/filetype.lua b/modules/home-manager/coding/neovim/config/plugin/filetype.lua similarity index 100% rename from modules/editor/config/plugin/filetype.lua rename to modules/home-manager/coding/neovim/config/plugin/filetype.lua diff --git a/modules/editor/config/plugin/fugitive.lua b/modules/home-manager/coding/neovim/config/plugin/fugitive.lua similarity index 100% rename from modules/editor/config/plugin/fugitive.lua rename to modules/home-manager/coding/neovim/config/plugin/fugitive.lua diff --git a/modules/editor/config/plugin/gitsigns.lua b/modules/home-manager/coding/neovim/config/plugin/gitsigns.lua similarity index 100% rename from modules/editor/config/plugin/gitsigns.lua rename to modules/home-manager/coding/neovim/config/plugin/gitsigns.lua diff --git a/modules/editor/config/plugin/harpoon.lua b/modules/home-manager/coding/neovim/config/plugin/harpoon.lua similarity index 100% rename from modules/editor/config/plugin/harpoon.lua rename to modules/home-manager/coding/neovim/config/plugin/harpoon.lua diff --git a/modules/editor/config/plugin/lint.lua b/modules/home-manager/coding/neovim/config/plugin/lint.lua similarity index 100% rename from modules/editor/config/plugin/lint.lua rename to modules/home-manager/coding/neovim/config/plugin/lint.lua diff --git a/modules/editor/config/plugin/mini.lua b/modules/home-manager/coding/neovim/config/plugin/mini.lua similarity index 100% rename from modules/editor/config/plugin/mini.lua rename to modules/home-manager/coding/neovim/config/plugin/mini.lua diff --git a/modules/editor/config/plugin/netrw.lua b/modules/home-manager/coding/neovim/config/plugin/netrw.lua similarity index 100% rename from modules/editor/config/plugin/netrw.lua rename to modules/home-manager/coding/neovim/config/plugin/netrw.lua diff --git a/modules/editor/config/plugin/phpactor.lua b/modules/home-manager/coding/neovim/config/plugin/phpactor.lua similarity index 100% rename from modules/editor/config/plugin/phpactor.lua rename to modules/home-manager/coding/neovim/config/plugin/phpactor.lua diff --git a/modules/editor/config/plugin/refactoring.lua b/modules/home-manager/coding/neovim/config/plugin/refactoring.lua similarity index 100% rename from modules/editor/config/plugin/refactoring.lua rename to modules/home-manager/coding/neovim/config/plugin/refactoring.lua diff --git a/modules/editor/config/plugin/snippets.lua b/modules/home-manager/coding/neovim/config/plugin/snippets.lua similarity index 100% rename from modules/editor/config/plugin/snippets.lua rename to modules/home-manager/coding/neovim/config/plugin/snippets.lua diff --git a/modules/editor/config/plugin/telescope.lua b/modules/home-manager/coding/neovim/config/plugin/telescope.lua similarity index 100% rename from modules/editor/config/plugin/telescope.lua rename to modules/home-manager/coding/neovim/config/plugin/telescope.lua diff --git a/modules/editor/config/plugin/treesitter.lua b/modules/home-manager/coding/neovim/config/plugin/treesitter.lua similarity index 100% rename from modules/editor/config/plugin/treesitter.lua rename to modules/home-manager/coding/neovim/config/plugin/treesitter.lua diff --git a/modules/editor/config/plugin/undotree.lua b/modules/home-manager/coding/neovim/config/plugin/undotree.lua similarity index 100% rename from modules/editor/config/plugin/undotree.lua rename to modules/home-manager/coding/neovim/config/plugin/undotree.lua diff --git a/modules/editor/config/plugin/vim-test.lua b/modules/home-manager/coding/neovim/config/plugin/vim-test.lua similarity index 100% rename from modules/editor/config/plugin/vim-test.lua rename to modules/home-manager/coding/neovim/config/plugin/vim-test.lua diff --git a/modules/editor/config/spell/en.utf-8.add b/modules/home-manager/coding/neovim/config/spell/en.utf-8.add similarity index 100% rename from modules/editor/config/spell/en.utf-8.add rename to modules/home-manager/coding/neovim/config/spell/en.utf-8.add diff --git a/modules/editor/config/stylua.toml b/modules/home-manager/coding/neovim/config/stylua.toml similarity index 100% rename from modules/editor/config/stylua.toml rename to modules/home-manager/coding/neovim/config/stylua.toml diff --git a/modules/home-manager/coding/neovim/default.nix b/modules/home-manager/coding/neovim/default.nix new file mode 100644 index 00000000..6f62d1cc --- /dev/null +++ b/modules/home-manager/coding/neovim/default.nix @@ -0,0 +1,197 @@ +{ + config, + lib, + pkgs, + ... +}: + +with lib; + +let + cfg = config.homeManagerModules.coding.neovim; +in +{ + options.homeManagerModules.coding.neovim.enable = mkEnableOption "Enable neovim"; + + config = mkIf cfg.enable { + programs.neovim = + let + php = pkgs.php82; + phpPackages = pkgs.php82Packages; + in + { + enable = true; + + plugins = with pkgs.vimPlugins; [ + comment-nvim + conf-vim + edit-alternate-vim + gitsigns-nvim + harpoon2 + mini-nvim + nvim-web-devicons + phpactor + refactoring-nvim + standard-vim + undotree + vim-caser + vim-nix + vim-pasta + vim-repeat + vim-sleuth + vim-textobj-indent + vim-textobj-user + vim-textobj-xmlattr + vim-unimpaired + + # Testing + vim-test + vimux + + # Git + vim-fugitive + + # Debugging + nvim-dap + nvim-dap-ui + nvim-dap-virtual-text + + # Treesitter + (pkgs.vimPlugins.nvim-treesitter.withPlugins ( + plugins: with plugins; [ + bash + comment + css + csv + dockerfile + gitattributes + gitignore + go + html + javascript + json + kdl + lua + luadoc + make + markdown + markdown_inline + nix + php + phpdoc + query + rst + scss + sql + terraform + twig + typescript + vim + vimdoc + vue + xml + yaml + ] + )) + nvim-treesitter-textobjects + + # LSP, linting and formatting + conform-nvim + lsp-status-nvim + nvim-lint + nvim-lspconfig + + # Completion + cmp-buffer + cmp-calc + cmp-cmdline + cmp-nvim-lsp + cmp-path + cmp-treesitter + cmp_luasnip + lspkind-nvim + nvim-cmp + + # Snippets + friendly-snippets + luasnip + + # Telescope + plenary-nvim + popup-nvim + telescope-frecency-nvim + telescope-fzf-native-nvim + telescope-live-grep-args-nvim + telescope-nvim + telescope-ui-select-nvim + + # Databases + vim-dadbod + vim-dadbod-ui + vim-dadbod-completion + + # Themes + catppuccin-nvim + ]; + + extraPackages = with pkgs; [ + # Languages + nodePackages.typescript + nodejs-slim + php + + # Language servers + bash-language-server + dockerfile-language-server-nodejs + emmet-language-server + gopls + lua-language-server + lua54Packages.luacheck + marksman + nixd + phpactor + tailwindcss-language-server + terraform-ls + typescript-language-server + vscode-langservers-extracted + vue-language-server + yaml-language-server + + # Formatters + black + eslint_d + nixfmt-rfc-style + nodePackages.prettier + stylua + yamlfmt + + # Tools + hadolint + html-tidy + mariadb + nodePackages.jsonlint + nodePackages.markdownlint-cli + phpPackages.php-codesniffer + phpPackages.phpstan + proselint + ripgrep + shellcheck + yamllint + ]; + }; + + xdg.configFile.nvim = { + source = ./config; + recursive = true; + }; + + home.file.".markdownlint.yaml".text = '' + default: true + + line-length: false + + no-duplicate-heading: + siblings_only: true + ''; + }; +} diff --git a/modules/mixins/phpactor/config/phpactor.yml b/modules/home-manager/coding/phpactor/config/phpactor.yml similarity index 100% rename from modules/mixins/phpactor/config/phpactor.yml rename to modules/home-manager/coding/phpactor/config/phpactor.yml diff --git a/modules/mixins/phpactor/config/templates/collection/SourceCode.php.twig b/modules/home-manager/coding/phpactor/config/templates/collection/SourceCode.php.twig similarity index 100% rename from modules/mixins/phpactor/config/templates/collection/SourceCode.php.twig rename to modules/home-manager/coding/phpactor/config/templates/collection/SourceCode.php.twig diff --git a/modules/mixins/phpactor/config/templates/default/SourceCode.php.twig b/modules/home-manager/coding/phpactor/config/templates/default/SourceCode.php.twig similarity index 100% rename from modules/mixins/phpactor/config/templates/default/SourceCode.php.twig rename to modules/home-manager/coding/phpactor/config/templates/default/SourceCode.php.twig diff --git a/modules/mixins/phpactor/config/templates/drupal-functional-test/SourceCode.php.twig b/modules/home-manager/coding/phpactor/config/templates/drupal-functional-test/SourceCode.php.twig similarity index 100% rename from modules/mixins/phpactor/config/templates/drupal-functional-test/SourceCode.php.twig rename to modules/home-manager/coding/phpactor/config/templates/drupal-functional-test/SourceCode.php.twig diff --git a/modules/mixins/phpactor/config/templates/drupal-kernel-test/SourceCode.php.twig b/modules/home-manager/coding/phpactor/config/templates/drupal-kernel-test/SourceCode.php.twig similarity index 100% rename from modules/mixins/phpactor/config/templates/drupal-kernel-test/SourceCode.php.twig rename to modules/home-manager/coding/phpactor/config/templates/drupal-kernel-test/SourceCode.php.twig diff --git a/modules/mixins/phpactor/config/templates/drupal-unit-test/SourceCode.php.twig b/modules/home-manager/coding/phpactor/config/templates/drupal-unit-test/SourceCode.php.twig similarity index 100% rename from modules/mixins/phpactor/config/templates/drupal-unit-test/SourceCode.php.twig rename to modules/home-manager/coding/phpactor/config/templates/drupal-unit-test/SourceCode.php.twig diff --git a/modules/home-manager/coding/phpactor/default.nix b/modules/home-manager/coding/phpactor/default.nix new file mode 100644 index 00000000..0b6063cc --- /dev/null +++ b/modules/home-manager/coding/phpactor/default.nix @@ -0,0 +1,24 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + cfg = config.homeManagerModules.coding.phpactor; +in +{ + options.homeManagerModules.coding.phpactor.enable = lib.mkEnableOption "Enable phpactor"; + + config = lib.mkIf cfg.enable { + home.packages = with pkgs; [ + phpactor + ]; + + xdg.configFile.phpactor = { + source = ./config; + recursive = true; + }; + }; +} diff --git a/modules/home-manager/core/default.nix b/modules/home-manager/core/default.nix new file mode 100644 index 00000000..e885317f --- /dev/null +++ b/modules/home-manager/core/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./gnupg.nix + ]; +} diff --git a/modules/home-manager/core/gnupg.nix b/modules/home-manager/core/gnupg.nix new file mode 100644 index 00000000..84735d28 --- /dev/null +++ b/modules/home-manager/core/gnupg.nix @@ -0,0 +1,8 @@ +{ + home.file.".gnupg/gpg-agent.conf".text = '' + allow-preset-passphrase + default-cache-ttl 600 + max-cache-ttl 7200 + enable-ssh-support + ''; +} diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix new file mode 100644 index 00000000..523b8156 --- /dev/null +++ b/modules/home-manager/default.nix @@ -0,0 +1,8 @@ +{ + imports = [ + ./cli + ./coding + ./core + ./desktop + ]; +} diff --git a/modules/home-manager/desktop/default.nix b/modules/home-manager/desktop/default.nix new file mode 100644 index 00000000..eb2d7749 --- /dev/null +++ b/modules/home-manager/desktop/default.nix @@ -0,0 +1,10 @@ +{ + imports = [ + ./firefox.nix + ./flameshot.nix + ./gtk.nix + ./qutebrowser.nix + ./mpv.nix + ./screenkey.nix + ]; +} diff --git a/modules/home-manager/desktop/firefox.nix b/modules/home-manager/desktop/firefox.nix new file mode 100644 index 00000000..53a8d6c3 --- /dev/null +++ b/modules/home-manager/desktop/firefox.nix @@ -0,0 +1,124 @@ +{ + config, + lib, + pkgs, + ... +}: + +with lib; + +let + cfg = config.homeManagerModules.desktop.firefox; +in +{ + options.homeManagerModules.desktop.firefox.enable = mkEnableOption "Enable firefox"; + + config = mkIf cfg.enable { + programs.firefox.enable = false; + + programs.librewolf = { + enable = true; + + languagePacks = [ "en-GB" ]; + + policies = { + CaptivePortal = false; + DisableFirefoxAccounts = true; + DisableFirefoxStudies = true; + DisablePocket = true; + DisableTelemetry = true; + + EnableTrackingProtection = { + Cryptomining = true; + Fingerprinting = true; + Value = true; + }; + + ExtensionSettings = { + "jid1-ZAdIEUB7XOzOJw@jetpack" = { + install_url = "https://addons.mozilla.org/firefox/downloads/latest/duckduckgo-for-firefox/latest.xpi"; + installation_mode = "force_installed"; + }; + + "uBlock0@raymondhill.net" = { + install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; + installation_mode = "force_installed"; + }; + }; + + FirefoxHome = { + Highlights = false; + Pocket = false; + Search = true; + Snippets = false; + SponsoredPocket = false; + SponsoredTopSites = false; + TopSites = true; + }; + + FirefoxSuggest = { + ImproveSuggest = false; + SponsoredSuggestions = false; + WebSuggestions = false; + }; + + NoDefaultBookmarks = true; + OfferToSaveLogins = false; + OfferToSaveLoginsDefault = false; + PasswordManagerEnabled = false; + + Preferences = { + "cookiebanners.service.mode" = 2; # Block cookie banners + "cookiebanners.service.mode.privateBrowsing" = 2; # Block cookie banners in private browsing + "privacy.donottrackheader.enabled" = true; + "privacy.fingerprintingProtection" = true; + "privacy.resistFingerprinting" = true; + "privacy.trackingprotection.emailtracking.enabled" = true; + "privacy.trackingprotection.enabled" = true; + "privacy.trackingprotection.fingerprinting.enabled" = true; + "privacy.trackingprotection.socialtracking.enabled" = true; + }; + + HardwareAcceleration = true; + TranslateEnabled = true; + + UserMessaging = { + ExtensionRecommendations = false; + UrlbarInterventions = false; + SkipOnboarding = true; + }; + }; + + profiles = { + default = { + extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [ + awesome-rss + bitwarden + darkreader + onetab + tree-style-tab + ublock-origin + videospeed + vimium + web-developer + ]; + + search = { + default = "ddg"; + force = true; + privateDefault = "ddg"; + }; + + settings = { + "browser.search.isUS" = false; + "browser.search.region" = "GB"; + "distribution.searchplugins.defaultLocale" = "en-GB"; + "general.useragent.locale" = "en-GB"; + "intl.accept_languages" = "en-GB, en"; + "intl.regional_prefs.use_os_locales" = true; + }; + }; + }; + }; + }; +} diff --git a/modules/home-manager/desktop/flameshot.nix b/modules/home-manager/desktop/flameshot.nix new file mode 100644 index 00000000..6e41de30 --- /dev/null +++ b/modules/home-manager/desktop/flameshot.nix @@ -0,0 +1,26 @@ +{ config, lib, ... }: + +with lib; + +let + cfg = config.homeManagerModules.desktop.flameshot; +in +{ + options.homeManagerModules.desktop.flameshot.enable = mkEnableOption "Enable flameshot"; + + config = mkIf cfg.enable { + services.flameshot = { + enable = true; + + settings = { + General = { + disabledTrayIcon = false; + saveAfterCopy = true; + savePath = "${config.xdg.userDirs.pictures}/Screenshots"; + showHelp = false; + uiColor = "#60a5fa"; + }; + }; + }; + }; +} diff --git a/modules/home-manager/desktop/gtk.nix b/modules/home-manager/desktop/gtk.nix new file mode 100644 index 00000000..f888d894 --- /dev/null +++ b/modules/home-manager/desktop/gtk.nix @@ -0,0 +1,34 @@ +{ + config, + lib, + pkgs, + ... +}: + +with lib; + +let + cfg = config.homeManagerModules.desktop.gtk; +in +{ + options.homeManagerModules.desktop.gtk.enable = mkEnableOption "Enable gtk"; + + config = mkIf cfg.enable { + gtk = with pkgs; { + enable = true; + + theme = { + name = "Arc-Dark"; + package = arc-theme; + }; + + iconTheme = { + name = "Arc"; + package = arc-icon-theme; + }; + + gtk3.extraConfig.gtk-enable-animations = false; + gtk4.extraConfig.gtk-enable-animations = false; + }; + }; +} diff --git a/modules/home-manager/desktop/mpv.nix b/modules/home-manager/desktop/mpv.nix new file mode 100644 index 00000000..05ceba15 --- /dev/null +++ b/modules/home-manager/desktop/mpv.nix @@ -0,0 +1,22 @@ +{ config, lib, ... }: + +with lib; + +let + cfg = config.homeManagerModules.desktop.mpv; +in +{ + options.homeManagerModules.desktop.mpv.enable = mkEnableOption "Enable mpv"; + + config = mkIf cfg.enable { + programs.mpv = { + enable = true; + + # https://github.com/mpv-player/mpv/blob/master/etc/input.conf + bindings = { + "DOWN" = "add volume -5"; + "UP" = "add volume 5"; + }; + }; + }; +} diff --git a/modules/mixins/qutebrowser.nix b/modules/home-manager/desktop/qutebrowser.nix similarity index 80% rename from modules/mixins/qutebrowser.nix rename to modules/home-manager/desktop/qutebrowser.nix index 23f97b55..f8102b33 100644 --- a/modules/mixins/qutebrowser.nix +++ b/modules/home-manager/desktop/qutebrowser.nix @@ -1,9 +1,14 @@ -{ lib, ... }: +{ config, lib, ... }: with lib; +let + cfg = config.homeManagerModules.desktop.qutebrowser; +in { - home-manager.users.opdavies = { + options.homeManagerModules.desktop.qutebrowser.enable = mkEnableOption "Enable qutebrowser"; + + config = mkIf cfg.enable { programs.qutebrowser = { enable = true; diff --git a/modules/home-manager/desktop/screenkey.nix b/modules/home-manager/desktop/screenkey.nix new file mode 100644 index 00000000..ba06a66d --- /dev/null +++ b/modules/home-manager/desktop/screenkey.nix @@ -0,0 +1,13 @@ +{ pkgs, ... }: + +{ + home.packages = with pkgs; [ screenkey ]; + + xdg.configFile."screenkey.json".text = builtins.toJSON { + key_mode = "composed"; + mods_mode = "emacs"; + persist = true; + size = "small"; + timeout = 0.25; + }; +} diff --git a/modules/mixins/common.nix b/modules/mixins/common.nix deleted file mode 100644 index 1579f83f..00000000 --- a/modules/mixins/common.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - imports = [ ./common ]; -} diff --git a/modules/mixins/direnv.nix b/modules/mixins/direnv.nix deleted file mode 100644 index 3b706805..00000000 --- a/modules/mixins/direnv.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ - programs.direnv = { - enable = true; - enableZshIntegration = true; - - nix-direnv.enable = true; - - silent = true; - }; -} diff --git a/modules/mixins/docker.nix b/modules/mixins/docker.nix deleted file mode 100644 index 5b976241..00000000 --- a/modules/mixins/docker.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ - virtualisation.docker = { - enable = true; - - autoPrune = { - enable = true; - dates = "weekly"; - }; - }; - - users.users.opdavies.extraGroups = [ "docker" ]; -} diff --git a/modules/mixins/firefox.nix b/modules/mixins/firefox.nix deleted file mode 100644 index 614f1a5c..00000000 --- a/modules/mixins/firefox.nix +++ /dev/null @@ -1,112 +0,0 @@ -{ - home-manager.users.opdavies = - { pkgs, ... }: - { - programs.firefox.enable = false; - - programs.librewolf = { - enable = true; - - languagePacks = [ "en-GB" ]; - - policies = { - CaptivePortal = false; - DisableFirefoxAccounts = true; - DisableFirefoxStudies = true; - DisablePocket = true; - DisableTelemetry = true; - - EnableTrackingProtection = { - Cryptomining = true; - Fingerprinting = true; - Value = true; - }; - - ExtensionSettings = { - "jid1-ZAdIEUB7XOzOJw@jetpack" = { - install_url = "https://addons.mozilla.org/firefox/downloads/latest/duckduckgo-for-firefox/latest.xpi"; - installation_mode = "force_installed"; - }; - - "uBlock0@raymondhill.net" = { - install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; - installation_mode = "force_installed"; - }; - }; - - FirefoxHome = { - Highlights = false; - Pocket = false; - Search = true; - Snippets = false; - SponsoredPocket = false; - SponsoredTopSites = false; - TopSites = true; - }; - - FirefoxSuggest = { - ImproveSuggest = false; - SponsoredSuggestions = false; - WebSuggestions = false; - }; - - NoDefaultBookmarks = true; - OfferToSaveLogins = false; - OfferToSaveLoginsDefault = false; - PasswordManagerEnabled = false; - - Preferences = { - "cookiebanners.service.mode" = 2; # Block cookie banners - "cookiebanners.service.mode.privateBrowsing" = 2; # Block cookie banners in private browsing - "privacy.donottrackheader.enabled" = true; - "privacy.fingerprintingProtection" = true; - "privacy.resistFingerprinting" = true; - "privacy.trackingprotection.emailtracking.enabled" = true; - "privacy.trackingprotection.enabled" = true; - "privacy.trackingprotection.fingerprinting.enabled" = true; - "privacy.trackingprotection.socialtracking.enabled" = true; - }; - - HardwareAcceleration = true; - TranslateEnabled = true; - - UserMessaging = { - ExtensionRecommendations = false; - UrlbarInterventions = false; - SkipOnboarding = true; - }; - }; - - profiles = { - default = { - extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [ - awesome-rss - bitwarden - darkreader - onetab - tree-style-tab - ublock-origin - videospeed - vimium - web-developer - ]; - - search = { - default = "ddg"; - force = true; - privateDefault = "ddg"; - }; - - settings = { - "browser.search.isUS" = false; - "browser.search.region" = "GB"; - "distribution.searchplugins.defaultLocale" = "en-GB"; - "general.useragent.locale" = "en-GB"; - "intl.accept_languages" = "en-GB, en"; - "intl.regional_prefs.use_os_locales" = true; - }; - }; - }; - }; - }; -} diff --git a/modules/mixins/flameshot.nix b/modules/mixins/flameshot.nix deleted file mode 100644 index 6b3bf1fb..00000000 --- a/modules/mixins/flameshot.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ - home-manager.users.opdavies = - { config, ... }: - { - services.flameshot = { - enable = true; - - settings = { - General = { - disabledTrayIcon = false; - saveAfterCopy = true; - savePath = "${config.xdg.userDirs.pictures}/Screenshots"; - showHelp = false; - uiColor = "#60a5fa"; - }; - }; - }; - }; -} diff --git a/modules/mixins/fonts.nix b/modules/mixins/fonts.nix deleted file mode 100644 index 446e2b25..00000000 --- a/modules/mixins/fonts.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ pkgs, ... }: - -{ - fonts = { - fontconfig = { - enable = true; - }; - - packages = with pkgs; [ - nerd-fonts.jetbrains-mono - nerd-fonts.meslo-lg - terminus_font - terminus_font_ttf - ]; - }; -} diff --git a/modules/mixins/fzf.nix b/modules/mixins/fzf.nix deleted file mode 100644 index 524c7196..00000000 --- a/modules/mixins/fzf.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ - home-manager.users.opdavies = { - programs.fzf = { - enable = true; - enableZshIntegration = true; - }; - - home.sessionVariables = { - FZF_DEFAULT_OPTS = "--reverse"; - }; - }; -} diff --git a/modules/mixins/git.nix b/modules/mixins/git.nix deleted file mode 100644 index 18a63de9..00000000 --- a/modules/mixins/git.nix +++ /dev/null @@ -1,161 +0,0 @@ -{ - git ? { }, - ... -}: - -{ - home-manager.users.opdavies = - { config, pkgs, ... }: - { - home.file."${config.xdg.configHome}/git/message".text = '' - - - # Description - # - # - Why is this change necessary? - # - How does it address the issue? - # - What side effects does this change have? - # - # For breaking changes, uncomment the following line and describe the change: - # - # BREAKING CHANGE: - # - # - # Add any issue IDs or commit SHAs that this commit references: - # - # Refs: - - ''; - - programs = { - git = { - enable = true; - userName = git.name; - userEmail = git.emailAddress; - - includes = [ - { - condition = "gitdir:${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/tfw"; - contents.user.email = "oliver.davies@tfw.wales"; - } - ]; - - aliases = { - aa = "add --all"; - assume = "update-index --assume-unchanged"; - assumed = "!git ls-files -v | grep '^[hsmrck?]' | cut -c 3-"; - b = "branch"; - blame = "blame -w -C -C -C"; - browse = "!gh repo view --web"; - ca = "commit --amend --verbose"; - car = "commit --amend --no-edit"; - cl = "!hub clone"; - co = "checkout"; - compare = "!hub compare"; - current-branch = "rev-parse --abbrev-ref HEAD"; - dc = "diff --color --word-diff --cached"; - df = "diff --color --word-diff"; - dup = "!git checkout develop && git fetch origin && echo && git sl develop..origin/develop && echo && git pull --quiet && git checkout -"; - fixup = "commit --fixup"; - issues = "!gh issue list --web"; - mup = "!git master-to-main-wrapper checkout %BRANCH% && git fetch origin && echo && git sl %BRANCH%..origin/%BRANCH% && echo && git pull --quiet && git checkout -"; - no-ff = "merge --no-ff"; - pl = "pull"; - prune = "remote prune origin"; - ps = "push"; - pulls = "!gh pr list --web"; - rbc = "rebase --continue"; - rdup = "!git dup && git rebase develop"; - remotes = "remote -v"; - repush = "!git pull --rebase && git push"; - ri = "rebase --interactive"; - rid = "!git rebase -i $(git merge-base develop HEAD)"; - rim = "!git rebase -i $(git master-to-main-wrapper merge-base %BRANCH% HEAD)"; - rip = "!git rebase -i $(git merge-base production HEAD)"; - ris = "!git rebase -i $(git merge-base staging HEAD)"; - riu = "!git rebase -i $(git rev-parse --abbrev-ref --symbolic-full-name @{u})"; - rmup = "!git mup && git master-to-main-wrapper rebase %BRANCH%"; - sl = "log --oneline --decorate -20"; - sla = "log --oneline --decorate --graph --all -20"; - slap = "log --oneline --decorate --graph --all"; - slp = "log --oneline --decorate"; - stash = "stash --included-untracked"; - unassume = "update-index --no-assume-unchanged"; - uncommit = "reset --soft HEAD^"; - unstage = "reset"; - update = "!git fetch --all --jobs=4 --prune --progress && git rebase --autostash --stat"; - upstream = "rev-parse --abbrev-ref --symbolic-full-name @{u}"; - ureset = "!git reset --hard $(git upstream)"; - worktrees = "worktree list"; - }; - - ignores = [ - "/.ddev/providers/" - "/.direnv/" - "/.ignored/" - "/.issue-id" - "/.phpactor.json" - "/notes" - "/todo" - ]; - - extraConfig = { - branch = { - autosetupmerge = true; - autosetuprebase = "always"; - sort = "-committerdate"; - }; - - checkout.defaultRemote = "origin"; - color.ui = true; - column.ui = "auto"; - commit.template = "${config.xdg.configHome}/git/message"; - - core = { - editor = "nvim"; - excludesFile = "~/.config/git/ignore"; - }; - - diff.tool = "vimdiff"; - fetch.prune = true; - gpg.format = "ssh"; - grep.lineNumber = true; - help.autocorrect = "1"; - init.defaultBranch = "main"; - - maintenance = { - auto = false; - strategy = "incremental"; - }; - - merge.ff = "only"; - - push = { - autoSetupRemote = true; - default = "upstream"; - }; - - pull = { - ff = "only"; - rebase = true; - }; - - rebase = { - autosquash = true; - autostash = true; - }; - - user.signingkey = "~/.ssh/id_rsa.pub"; - }; - }; - }; - - home = { - packages = with pkgs; [ nixpkgs-2411.git-instafix ]; - - sessionVariables = { - GIT_INSTAFIX_UPSTREAM = "origin/main"; - }; - }; - }; -} diff --git a/modules/mixins/gnupg.nix b/modules/mixins/gnupg.nix deleted file mode 100644 index 416180b5..00000000 --- a/modules/mixins/gnupg.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ pkgs, ... }: - -{ - security.pam.services.login.gnupg.enable = true; - - programs = { - gnupg.agent = { - enable = true; - enableSSHSupport = true; - - pinentryPackage = pkgs.pinentry-qt; - }; - }; - - home-manager.users.opdavies = { - home.file = { - ".gnupg/gpg-agent.conf".text = '' - allow-preset-passphrase - default-cache-ttl 600 - max-cache-ttl 7200 - enable-ssh-support - ''; - }; - }; -} diff --git a/modules/mixins/gtk.nix b/modules/mixins/gtk.nix deleted file mode 100644 index 35f95b1e..00000000 --- a/modules/mixins/gtk.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - home-manager.users.opdavies = - { pkgs, ... }: - { - gtk = { - enable = true; - - theme = { - name = "Arc-Dark"; - package = pkgs.arc-theme; - }; - - iconTheme = { - name = "Arc"; - package = pkgs.arc-icon-theme; - }; - - gtk3.extraConfig.gtk-enable-animations = false; - gtk4.extraConfig.gtk-enable-animations = false; - }; - }; -} diff --git a/modules/mixins/kanata.nix b/modules/mixins/kanata.nix deleted file mode 100644 index edfa25f9..00000000 --- a/modules/mixins/kanata.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ devices }: - -{ - services.kanata = { - enable = true; - - keyboards = { - default = { - inherit devices; - - extraDefCfg = "process-unmapped-keys yes"; - - config = '' - (defsrc - caps a s d f j k l ; - ) - - (defvar - tap-time 150 - hold-time 200 - ) - - (defalias - escctrl (tap-hold 100 100 esc lctl) - a (tap-hold $tap-time $hold-time a lmet) - s (tap-hold $tap-time $hold-time s lalt) - d (tap-hold $tap-time $hold-time d lsft) - f (tap-hold $tap-time $hold-time f lctl) - j (tap-hold $tap-time $hold-time j rctl) - k (tap-hold $tap-time $hold-time k rsft) - l (tap-hold $tap-time $hold-time l ralt) - ; (tap-hold $tap-time $hold-time ; rmet) - ) - - (deflayer base - @escctrl @a @s @d @f @j @k @l @; - ) - ''; - }; - }; - }; -} diff --git a/modules/mixins/mpv.nix b/modules/mixins/mpv.nix deleted file mode 100644 index d84f07ef..00000000 --- a/modules/mixins/mpv.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - home-manager.users.opdavies.programs.mpv = { - enable = true; - - # https://github.com/mpv-player/mpv/blob/master/etc/input.conf - bindings = { - "DOWN" = "add volume -5"; - "UP" = "add volume 5"; - }; - }; -} diff --git a/modules/mixins/node.nix b/modules/mixins/node.nix deleted file mode 100644 index 823ba7a3..00000000 --- a/modules/mixins/node.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ - home-manager.users.opdavies = - { config, ... }: - let - inherit (config.xdg) configHome dataHome stateHome; - in - { - xdg.configFile."${config.home.sessionVariables.NPM_CONFIG_USERCONFIG}".text = '' - cache=${configHome}/npm - init-module=${configHome}/npm/config/npm-init.js - logs-dir=${stateHome}/npm/logs - prefix=${dataHome}/npm - ''; - - home.sessionVariables = { - NPM_CONFIG_USERCONFIG = "${configHome}/npm/npmrc"; - }; - }; -} diff --git a/modules/mixins/notes.nix b/modules/mixins/notes.nix deleted file mode 100644 index 424712cc..00000000 --- a/modules/mixins/notes.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - home-manager.users.opdavies = - { config, pkgs, ... }: - { - xdg = { - enable = true; - userDirs.enable = true; - }; - - home = { - packages = with pkgs; [ notes ]; - - sessionVariables = { - NOTES_DIRECTORY = "${config.xdg.userDirs.documents}/wiki/notes"; - }; - }; - }; -} diff --git a/modules/mixins/openssh.nix b/modules/mixins/openssh.nix deleted file mode 100644 index 542ca976..00000000 --- a/modules/mixins/openssh.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ lib, ... }: - -{ - services.openssh = { - enable = true; - - openFirewall = lib.mkForce true; - - settings = { - PasswordAuthentication = false; - PermitRootLogin = lib.mkForce "no"; - }; - }; -} diff --git a/modules/mixins/phpactor.nix b/modules/mixins/phpactor.nix deleted file mode 100644 index 426c502c..00000000 --- a/modules/mixins/phpactor.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - imports = [ ./phpactor ]; -} diff --git a/modules/mixins/phpactor/default.nix b/modules/mixins/phpactor/default.nix deleted file mode 100644 index e4d1929d..00000000 --- a/modules/mixins/phpactor/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ pkgs, ... }: -{ - environment.systemPackages = with pkgs; [ - phpactor - ]; - - home-manager.users.opdavies.xdg.configFile.phpactor = { - source = ./config; - recursive = true; - }; -} diff --git a/modules/mixins/pipewire.nix b/modules/mixins/pipewire.nix deleted file mode 100644 index 03ff2376..00000000 --- a/modules/mixins/pipewire.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ - services.pipewire = { - enable = true; - - alsa = { - enable = true; - support32Bit = true; - }; - - pulse.enable = true; - }; -} diff --git a/modules/mixins/podman.nix b/modules/mixins/podman.nix deleted file mode 100644 index 05c99288..00000000 --- a/modules/mixins/podman.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - virtualisation = { - oci-containers.backend = "podman"; - - podman = { - enable = true; - - autoPrune = { - enable = true; - dates = "weekly"; - }; - }; - }; - - users.users.opdavies.extraGroups = [ "podman" ]; -} diff --git a/modules/mixins/ranger.nix b/modules/mixins/ranger.nix deleted file mode 100644 index bb90930f..00000000 --- a/modules/mixins/ranger.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - home-manager.users.opdavies.programs.ranger = { - enable = true; - }; -} diff --git a/modules/mixins/screenkey.nix b/modules/mixins/screenkey.nix deleted file mode 100644 index 70c8941f..00000000 --- a/modules/mixins/screenkey.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ - home-manager.users.opdavies = - { pkgs, ... }: - { - home.packages = with pkgs; [ screenkey ]; - - xdg.configFile."screenkey.json".text = builtins.toJSON { - key_mode = "composed"; - mods_mode = "emacs"; - persist = true; - size = "small"; - timeout = 0.25; - }; - }; -} diff --git a/modules/mixins/scripts.nix b/modules/mixins/scripts.nix deleted file mode 100644 index 680de22c..00000000 --- a/modules/mixins/scripts.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - imports = [ ./scripts ]; -} diff --git a/modules/mixins/st.nix b/modules/mixins/st.nix deleted file mode 100644 index e684335e..00000000 --- a/modules/mixins/st.nix +++ /dev/null @@ -1,361 +0,0 @@ -{ pkgs, ... }: - -{ - environment.systemPackages = with pkgs; [ - (st.override { - conf = '' - static char *font = "MesloLGSNerdFontMono:pixelsize=16:antialias=true:autohint=true"; - - int disablebold = 1; - int disableitalic = 1; - int disableroman = 1; - - static int borderpx = 2; - - static char *shell = "/bin/sh"; - char *utmp = NULL; - char *scroll = NULL; - char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400"; - - char *vtiden = "\033[?6c"; - - static float cwscale = 1.0; - static float chscale = 1.0; - - wchar_t *worddelimiters = L" "; - - static unsigned int doubleclicktimeout = 300; - static unsigned int tripleclicktimeout = 600; - - int allowaltscreen = 1; - - int allowwindowops = 0; - - static double minlatency = 2; - static double maxlatency = 33; - - static unsigned int blinktimeout = 800; - - static unsigned int cursorthickness = 2; - - static int bellvolume = 0; - - char *termname = "st-256color"; - - unsigned int tabspaces = 8; - - static const char *colorname[] = { - "black", - "red3", - "green3", - "yellow3", - "blue2", - "magenta3", - "cyan3", - "gray90", - - "gray50", - "red", - "green", - "yellow", - "#5c5cff", - "magenta", - "cyan", - "white", - - [255] = 0, - - "#cccccc", - "#555555", - "gray90", - "black", - }; - - unsigned int defaultfg = 258; - unsigned int defaultbg = 259; - unsigned int defaultcs = 256; - static unsigned int defaultrcs = 257; - - static unsigned int cursorshape = 2; - - static unsigned int cols = 80; - static unsigned int rows = 24; - - static unsigned int mouseshape = XC_xterm; - static unsigned int mousefg = 7; - static unsigned int mousebg = 0; - - static unsigned int defaultattr = 11; - - static uint forcemousemod = ShiftMask; - - static MouseShortcut mshortcuts[] = { - { XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 }, - { ShiftMask, Button4, ttysend, {.s = "\033[5;2~"} }, - { XK_ANY_MOD, Button4, ttysend, {.s = "\031"} }, - { ShiftMask, Button5, ttysend, {.s = "\033[6;2~"} }, - { XK_ANY_MOD, Button5, ttysend, {.s = "\005"} }, - }; - - #define MODKEY Mod1Mask - #define TERMMOD (ControlMask|ShiftMask) - - static Shortcut shortcuts[] = { - { XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} }, - { ControlMask, XK_Print, toggleprinter, {.i = 0} }, - { ShiftMask, XK_Print, printscreen, {.i = 0} }, - { XK_ANY_MOD, XK_Print, printsel, {.i = 0} }, - { TERMMOD, XK_Prior, zoom, {.f = +1} }, - { TERMMOD, XK_Next, zoom, {.f = -1} }, - { TERMMOD, XK_Home, zoomreset, {.f = 0} }, - { TERMMOD, XK_C, clipcopy, {.i = 0} }, - { TERMMOD, XK_D, zoom, {.f = -2} }, - { TERMMOD, XK_J, zoom, {.f = -1} }, - { TERMMOD, XK_K, zoom, {.f = +1} }, - { TERMMOD, XK_U, zoom, {.f = +2} }, - { TERMMOD, XK_V, clippaste, {.i = 0} }, - { TERMMOD, XK_Y, selpaste, {.i = 0} }, - { ShiftMask, XK_Insert, selpaste, {.i = 0} }, - { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, - }; - - static KeySym mappedkeys[] = { -1 }; - - static uint ignoremod = Mod2Mask|XK_SWITCH_MOD; - - static Key key[] = { - { XK_KP_Home, ShiftMask, "\033[2J", 0, -1}, - { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1}, - { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1}, - { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1}, - { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0}, - { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1}, - { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1}, - { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0}, - { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1}, - { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1}, - { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0}, - { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1}, - { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1}, - { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0}, - { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1}, - { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1}, - { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0}, - { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, - { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0}, - { XK_KP_End, ControlMask, "\033[J", -1, 0}, - { XK_KP_End, ControlMask, "\033[1;5F", +1, 0}, - { XK_KP_End, ShiftMask, "\033[K", -1, 0}, - { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0}, - { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0}, - { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0}, - { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0}, - { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0}, - { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0}, - { XK_KP_Insert, ControlMask, "\033[L", -1, 0}, - { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0}, - { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, - { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, - { XK_KP_Delete, ControlMask, "\033[M", -1, 0}, - { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0}, - { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0}, - { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0}, - { XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0}, - { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, - { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0}, - { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0}, - { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0}, - { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0}, - { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0}, - { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0}, - { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0}, - { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0}, - { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0}, - { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0}, - { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0}, - { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0}, - { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0}, - { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0}, - { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0}, - { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0}, - { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0}, - { XK_Up, ShiftMask, "\033[1;2A", 0, 0}, - { XK_Up, Mod1Mask, "\033[1;3A", 0, 0}, - { XK_Up, ShiftMask|Mod1Mask, "\033[1;4A", 0, 0}, - { XK_Up, ControlMask, "\033[1;5A", 0, 0}, - { XK_Up, ShiftMask|ControlMask, "\033[1;6A", 0, 0}, - { XK_Up, ControlMask|Mod1Mask, "\033[1;7A", 0, 0}, - { XK_Up, ShiftMask|ControlMask|Mod1Mask, "\033[1;8A", 0, 0}, - { XK_Up, XK_ANY_MOD, "\033[A", 0, -1}, - { XK_Up, XK_ANY_MOD, "\033OA", 0, +1}, - { XK_Down, ShiftMask, "\033[1;2B", 0, 0}, - { XK_Down, Mod1Mask, "\033[1;3B", 0, 0}, - { XK_Down, ShiftMask|Mod1Mask, "\033[1;4B", 0, 0}, - { XK_Down, ControlMask, "\033[1;5B", 0, 0}, - { XK_Down, ShiftMask|ControlMask, "\033[1;6B", 0, 0}, - { XK_Down, ControlMask|Mod1Mask, "\033[1;7B", 0, 0}, - { XK_Down, ShiftMask|ControlMask|Mod1Mask, "\033[1;8B", 0, 0}, - { XK_Down, XK_ANY_MOD, "\033[B", 0, -1}, - { XK_Down, XK_ANY_MOD, "\033OB", 0, +1}, - { XK_Left, ShiftMask, "\033[1;2D", 0, 0}, - { XK_Left, Mod1Mask, "\033[1;3D", 0, 0}, - { XK_Left, ShiftMask|Mod1Mask, "\033[1;4D", 0, 0}, - { XK_Left, ControlMask, "\033[1;5D", 0, 0}, - { XK_Left, ShiftMask|ControlMask, "\033[1;6D", 0, 0}, - { XK_Left, ControlMask|Mod1Mask, "\033[1;7D", 0, 0}, - { XK_Left, ShiftMask|ControlMask|Mod1Mask, "\033[1;8D", 0, 0}, - { XK_Left, XK_ANY_MOD, "\033[D", 0, -1}, - { XK_Left, XK_ANY_MOD, "\033OD", 0, +1}, - { XK_Right, ShiftMask, "\033[1;2C", 0, 0}, - { XK_Right, Mod1Mask, "\033[1;3C", 0, 0}, - { XK_Right, ShiftMask|Mod1Mask, "\033[1;4C", 0, 0}, - { XK_Right, ControlMask, "\033[1;5C", 0, 0}, - { XK_Right, ShiftMask|ControlMask, "\033[1;6C", 0, 0}, - { XK_Right, ControlMask|Mod1Mask, "\033[1;7C", 0, 0}, - { XK_Right, ShiftMask|ControlMask|Mod1Mask, "\033[1;8C", 0, 0}, - { XK_Right, XK_ANY_MOD, "\033[C", 0, -1}, - { XK_Right, XK_ANY_MOD, "\033OC", 0, +1}, - { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0}, - { XK_Return, Mod1Mask, "\033\r", 0, 0}, - { XK_Return, XK_ANY_MOD, "\r", 0, 0}, - { XK_Insert, ShiftMask, "\033[4l", -1, 0}, - { XK_Insert, ShiftMask, "\033[2;2~", +1, 0}, - { XK_Insert, ControlMask, "\033[L", -1, 0}, - { XK_Insert, ControlMask, "\033[2;5~", +1, 0}, - { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, - { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, - { XK_Delete, ControlMask, "\033[M", -1, 0}, - { XK_Delete, ControlMask, "\033[3;5~", +1, 0}, - { XK_Delete, ShiftMask, "\033[2K", -1, 0}, - { XK_Delete, ShiftMask, "\033[3;2~", +1, 0}, - { XK_Delete, XK_ANY_MOD, "\033[P", -1, 0}, - { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, - { XK_BackSpace, XK_NO_MOD, "\177", 0, 0}, - { XK_BackSpace, Mod1Mask, "\033\177", 0, 0}, - { XK_Home, ShiftMask, "\033[2J", 0, -1}, - { XK_Home, ShiftMask, "\033[1;2H", 0, +1}, - { XK_Home, XK_ANY_MOD, "\033[H", 0, -1}, - { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1}, - { XK_End, ControlMask, "\033[J", -1, 0}, - { XK_End, ControlMask, "\033[1;5F", +1, 0}, - { XK_End, ShiftMask, "\033[K", -1, 0}, - { XK_End, ShiftMask, "\033[1;2F", +1, 0}, - { XK_End, XK_ANY_MOD, "\033[4~", 0, 0}, - { XK_Prior, ControlMask, "\033[5;5~", 0, 0}, - { XK_Prior, ShiftMask, "\033[5;2~", 0, 0}, - { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, - { XK_Next, ControlMask, "\033[6;5~", 0, 0}, - { XK_Next, ShiftMask, "\033[6;2~", 0, 0}, - { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0}, - { XK_F1, XK_NO_MOD, "\033OP" , 0, 0}, - { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0}, - { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0}, - { XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0}, - { XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0}, - { XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0}, - { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0}, - { XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0}, - { XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0}, - { XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0}, - { XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0}, - { XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0}, - { XK_F3, XK_NO_MOD, "\033OR" , 0, 0}, - { XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0}, - { XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0}, - { XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0}, - { XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0}, - { XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0}, - { XK_F4, XK_NO_MOD, "\033OS" , 0, 0}, - { XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0}, - { XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0}, - { XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0}, - { XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0}, - { XK_F5, XK_NO_MOD, "\033[15~", 0, 0}, - { XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0}, - { XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0}, - { XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0}, - { XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0}, - { XK_F6, XK_NO_MOD, "\033[17~", 0, 0}, - { XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0}, - { XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0}, - { XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0}, - { XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0}, - { XK_F7, XK_NO_MOD, "\033[18~", 0, 0}, - { XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0}, - { XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0}, - { XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0}, - { XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0}, - { XK_F8, XK_NO_MOD, "\033[19~", 0, 0}, - { XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0}, - { XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0}, - { XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0}, - { XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0}, - { XK_F9, XK_NO_MOD, "\033[20~", 0, 0}, - { XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0}, - { XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0}, - { XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0}, - { XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0}, - { XK_F10, XK_NO_MOD, "\033[21~", 0, 0}, - { XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0}, - { XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0}, - { XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0}, - { XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0}, - { XK_F11, XK_NO_MOD, "\033[23~", 0, 0}, - { XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0}, - { XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0}, - { XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0}, - { XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0}, - { XK_F12, XK_NO_MOD, "\033[24~", 0, 0}, - { XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0}, - { XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0}, - { XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0}, - { XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0}, - { XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0}, - { XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0}, - { XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0}, - { XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0}, - { XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0}, - { XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0}, - { XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0}, - { XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0}, - { XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0}, - { XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0}, - { XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0}, - { XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0}, - { XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0}, - { XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0}, - { XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0}, - { XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0}, - { XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0}, - { XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0}, - { XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0}, - { XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0}, - { XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0}, - { XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0}, - { XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0}, - }; - - static uint selmasks[] = { - [SEL_RECTANGULAR] = Mod1Mask, - }; - - static char ascii_printable[] = - " !\"#$%&'()*+,-./0123456789:;<=>?" - "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" - "`abcdefghijklmnopqrstuvwxyz{|}~"; - ''; - - patches = [ - (fetchpatch { - url = "https://st.suckless.org/patches/disable_bold_italic_fonts/st-disable-bold-italic-fonts-0.8.2.diff"; - sha256 = "PG96QMqbX3Fr0EvDmF4lm/J3gj18eyBfm1bJ3M7plvQ="; - }) - - (fetchpatch { - url = "https://st.suckless.org/patches/anysize/st-anysize-20220718-baa9357.diff"; - sha256 = "yx9VSwmPACx3EN3CAdQkxeoJKJxQ6ziC9tpBcoWuWHc="; - }) - ]; - }) - ]; -} diff --git a/modules/mixins/starship.nix b/modules/mixins/starship.nix deleted file mode 100644 index 19debae3..00000000 --- a/modules/mixins/starship.nix +++ /dev/null @@ -1,176 +0,0 @@ -{ - home-manager.users.opdavies.programs.starship = - let - inherit (builtins) concatStringsSep; - in - { - enable = true; - enableZshIntegration = true; - - settings = { - add_newline = false; - - # https://starship.rs/config/#prompt - format = concatStringsSep "" [ - "\n" - "$username" - "$hostname" - "$directory" - "$vcsh" - "$git_branch" - "$git_status" - "$git_metrics" - "$docker_context" - "$nodejs" - "$php" - "$terraform" - "$nix_shell" - "$direnv" - "\${custom.mob}" - "$memory_usage" - "$cmd_duration" - "$lua" - "$status" - "$character" - ]; - - cmd_duration.disabled = true; - direnv.disabled = false; - directory.format = "[$path]($style) "; - git_status.disabled = true; - nix_shell.disabled = true; - nodejs.disabled = true; - php.disabled = true; - username.disabled = true; - - custom = { - mob = { - command = "echo $MOB_TIMER_ROOM"; - format = "[($output)]($style) "; - when = "[[ -v MOB_TIMER_ROOM ]]"; - }; - }; - - # https://starship.rs/presets/plain-text - aws.symbol = "aws "; - azure.symbol = "az "; - bun.symbol = "bun "; - c.symbol = "C "; - character = { - success_symbol = "[>](bold green)"; - error_symbol = "[x](bold red)"; - vimcmd_symbol = "[<](bold green)"; - }; - cobol.symbol = "cobol "; - conda.symbol = "conda "; - crystal.symbol = "cr "; - cmake.symbol = "cmake "; - daml.symbol = "daml "; - dart.symbol = "dart "; - deno.symbol = "deno "; - dotnet.symbol = ".NET "; - directory.read_only = " ro"; - docker_context.symbol = "docker "; - elixir.symbol = "exs "; - elm.symbol = "elm "; - fennel.symbol = "fnl "; - fossil_branch.symbol = "fossil "; - gcloud.symbol = "gcp "; - git_branch.symbol = "git "; - git_commit.tag_symbol = " tag "; - git_status = { - ahead = ">"; - behind = "<"; - diverged = "<>"; - renamed = "r"; - deleted = "x"; - }; - gleam.symbol = "gleam "; - golang.symbol = "go "; - gradle.symbol = "gradle "; - guix_shell.symbol = "guix "; - hg_branch.symbol = "hg "; - java.symbol = "java "; - julia.symbol = "jl "; - kotlin.symbol = "kt "; - lua.symbol = "lua "; - nodejs.symbol = "nodejs "; - memory_usage.symbol = "memory "; - meson.symbol = "meson "; - nats.symbol = "nats "; - nim.symbol = "nim "; - nix_shell.symbol = "nix "; - ocaml.symbol = "ml "; - opa.symbol = "opa "; - os.symbols = { - AIX = "aix "; - Alpaquita = "alq "; - AlmaLinux = "alma "; - Alpine = "alp "; - Amazon = "amz "; - Android = "andr "; - Arch = "rch "; - Artix = "atx "; - CentOS = "cent "; - Debian = "deb "; - DragonFly = "dfbsd "; - Emscripten = "emsc "; - EndeavourOS = "ndev "; - Fedora = "fed "; - FreeBSD = "fbsd "; - Garuda = "garu "; - Gentoo = "gent "; - HardenedBSD = "hbsd "; - Illumos = "lum "; - Kali = "kali "; - Linux = "lnx "; - Mabox = "mbox "; - Macos = "mac "; - Manjaro = "mjo "; - Mariner = "mrn "; - MidnightBSD = "mid "; - Mint = "mint "; - NetBSD = "nbsd "; - NixOS = "nix "; - OpenBSD = "obsd "; - OpenCloudOS = "ocos "; - openEuler = "oeul "; - openSUSE = "osuse "; - OracleLinux = "orac "; - Pop = "pop "; - Raspbian = "rasp "; - Redhat = "rhl "; - RedHatEnterprise = "rhel "; - RockyLinux = "rky "; - Redox = "redox "; - Solus = "sol "; - SUSE = "suse "; - Ubuntu = "ubnt "; - Ultramarine = "ultm "; - Unknown = "unk "; - Void = "void "; - Windows = "win "; - }; - package.symbol = "pkg "; - perl.symbol = "pl "; - php.symbol = "php "; - pijul_channel.symbol = "pijul "; - pulumi.symbol = "pulumi "; - purescript.symbol = "purs "; - python.symbol = "py "; - quarto.symbol = "quarto "; - raku.symbol = "raku "; - ruby.symbol = "rb "; - rust.symbol = "rs "; - scala.symbol = "scala "; - spack.symbol = "spack "; - solidity.symbol = "solidity "; - status.symbol = "[x](bold red) "; - sudo.symbol = "sudo "; - swift.symbol = "swift "; - typst.symbol = "typst "; - terraform.symbol = "terraform "; - zig.symbol = "zig "; - }; - }; -} diff --git a/modules/mixins/thunar.nix b/modules/mixins/thunar.nix deleted file mode 100644 index b44265d4..00000000 --- a/modules/mixins/thunar.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ pkgs, ... }: - -{ - programs.thunar = { - enable = true; - - plugins = with pkgs.xfce; [ - thunar-archive-plugin - ]; - }; - - environment.systemPackages = with pkgs; [ xfce.tumbler ]; -} diff --git a/modules/mixins/tmux.nix b/modules/mixins/tmux.nix deleted file mode 100644 index 7420a4d6..00000000 --- a/modules/mixins/tmux.nix +++ /dev/null @@ -1,117 +0,0 @@ -{ pkgs, ... }: - -{ - programs.tmux = { - enable = true; - - terminal = "tmux-256color"; - - extraConfig = '' - set-option -g status-keys "vi" - set-option -sa terminal-features "''${TERM}:RGB" - - bind -n S-Left resize-pane -L 2 - bind -n S-Right resize-pane -R 2 - bind -n S-Down resize-pane -D 1 - bind -n S-Up resize-pane -U 1 - - bind -n C-Left resize-pane -L 10 - bind -n C-Right resize-pane -R 10 - bind -n C-Down resize-pane -D 5 - bind -n C-Up resize-pane -U 5 - - # Status line customisation - set-option -g status-left "" - set-option -g status-right " #{session_name}" - set-option -g status-right-length 100 - set-option -g status-style "fg=#7C7D83 bg=default" - set-option -g window-status-activity-style none - set-option -g window-status-current-style "fg=#E9E9EA" - - bind c new-window -c "#{pane_current_path}" - - set -g base-index 1 - set -g pane-base-index 1 - set -g renumber-windows on - - # Break a pane into a new window. - bind-key b break-pane -d - bind-key J command-prompt -p "join pane from: " "join-pane -h -s '%%'" - - bind-key C-j choose-tree - - set-window-option -g mode-keys vi - bind -T copy-mode-vi v send-keys -X begin-selection - bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard' - - bind C-j split-window -v "tmux list-sessions | sed -E 's/:.*$//' | grep -v \"^$(tmux display-message -p '#S')\$\" | fzf --reverse | xargs tmux switch-client -t" - - bind-key K run-shell 'tmux switch-client -n \; kill-session -t "$(tmux display-message -p "#S")" || tmux kill-session' - - # Allow clearing screen with ctrl-l by using C-l - bind C-l send-keys "C-l" - bind C-k send-keys "C-k" - - # Enable mouse support. - setw -g mouse on - - # Remove delay when switching Vim modes. - set -sg escape-time 0 - - set-option -g pane-active-border-style "fg=#1f2335" - set-option -g pane-border-style "fg=#1f2335" - - # Vim-like pane navigation. - bind ^ last-window - bind h select-pane -L - bind j select-pane -D - bind k select-pane -U - bind l select-pane -R - - bind-key -r f run-shell "tmux new-window tmux-sessionizer" - - bind-key -r D new-window -c "#{pane_current_path}" "[[ -e TODO.md ]] && nvim TODO.md || nvim ~/Documents/wiki/todo.txt" - bind-key -r N new-window "notes" - bind-key -r W split-window -h -c ~/Documents/wiki "nvim '+Telescope find_files'" - ''; - - plugins = with pkgs.tmuxPlugins; [ - vim-tmux-navigator - yank - ]; - }; - - home-manager.users.opdavies = - { config, ... }: - with pkgs; - { - home.packages = [ - tmux-sessionizer - ]; - - xdg.configFile."tmux-sessionizer/default".source = "${ - writeShellApplication { - name = ".tmux-sessionizer"; - - runtimeInputs = [ - tmux - ]; - - text = '' - set +o errexit - set +o nounset - - if [[ "$PWD" == "${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/os" || "$PWD" == "${config.xdg.userDirs.extraConfig.XDG_REPOS_DIR}/personal" ]]; then - clear - - return - fi - - tmux new-window -d -n scratch - nvim . - clear - ''; - } - }/bin/.tmux-sessionizer"; - }; -} diff --git a/modules/mixins/zram.nix b/modules/mixins/zram.nix deleted file mode 100644 index 60dd81e4..00000000 --- a/modules/mixins/zram.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ - zramSwap = { - enable = true; - algorithm = "zstd"; - memoryPercent = 90; - }; -} diff --git a/modules/mixins/zsh.nix b/modules/mixins/zsh.nix deleted file mode 100644 index f42fd619..00000000 --- a/modules/mixins/zsh.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - imports = [ ./zsh ]; -} diff --git a/modules/mixins/zsh/default.nix b/modules/mixins/zsh/default.nix deleted file mode 100644 index 26d17d50..00000000 --- a/modules/mixins/zsh/default.nix +++ /dev/null @@ -1,103 +0,0 @@ -{ - home-manager.users.opdavies = - { config, pkgs, ... }: - { - programs.zsh = { - enable = true; - enableCompletion = true; - syntaxHighlighting.enable = true; - - zsh-abbr = { - enable = true; - - abbreviations = import ./abbreviations.nix; - globalAbbreviations = import ./global-abbreviations.nix; - }; - - dotDir = ".config/zsh"; - - shellAliases = (import ./aliases.nix { inherit config; }); - - localVariables = { - ABBR_SET_EXPANSION_CURSOR = 1; - }; - - profileExtra = '' - if [[ -z "$DISPLAY" ]] && [[ "$(tty)" == "/dev/tty1" ]]; then - exec startx - fi - ''; - - initExtra = '' - background() { - for ((i=2;i<=$#;i++)); do - ''${@[1]} ''${@[$i]} &> /dev/null & - done - } - - # suffix - alias -s gz="tar -tf" - alias -s {html,HTML}="background firefox" - alias -s {jpg,JPG,png,PNG}="background okular" - alias -s {pdf,PDF}="background okular" - alias -s {zip,ZIP}="unzip -l" - - git() { - case "$1" in - clone) - shift - - local repo_url="$1" - local repo_path="''${2:-}" - - if [ -n "$TARGET_DIR" ]; then - command git clone "$repo_url" "$repo_path" - else - command git clone "$repo_url" - repo_path=$(basename "$repo_url" .git) - fi - - ${pkgs.tmux-sessionizer}/bin/tmux-sessionizer "$repo_path" - ;; - - root) - shift - - local ROOT="$(${pkgs.git}/bin/git rev-parse --show-toplevel 2> /dev/null || echo -n .)" - - if [[ $# == 0 ]]; then - cd "''${ROOT}" - else - (cd "''${ROOT}" && eval "''${@}") - fi - ;; - - *) - ${pkgs.git}/bin/git "''${@}" - ;; - esac - } - - mbsync() { - ${pkgs.isync}/bin/mbsync --config "${config.xdg.configHome}/isync/mbsyncrc" "''${@}" - } - - ttyper() { - command ${pkgs.ttyper}/bin/ttyper --language english1000 --words 50 "''${@}" - } - - yt-dlp() { - command yt-dlp --paths ~/Videos "$@" - } - - bindkey -s ^f "tmux-sessionizer\n" - bindkey -s ^v "nvim\n" - - setopt auto_cd - setopt auto_pushd - setopt pushd_ignore_dups - setopt pushdminus - ''; - }; - }; -} diff --git a/modules/nixos/cli/default.nix b/modules/nixos/cli/default.nix new file mode 100644 index 00000000..f768e96d --- /dev/null +++ b/modules/nixos/cli/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./docker.nix + ./podman.nix + ]; +} diff --git a/modules/nixos/cli/docker.nix b/modules/nixos/cli/docker.nix new file mode 100644 index 00000000..e73fd3c7 --- /dev/null +++ b/modules/nixos/cli/docker.nix @@ -0,0 +1,25 @@ +{ config, lib, ... }: + +with lib; + +let + cfg = config.nixosModules.cli.docker; +in +{ + options.nixosModules.cli.docker.enable = mkEnableOption "Enable docker"; + + config = mkIf cfg.enable { + virtualisation = { + oci-containers.backend = "docker"; + + docker = { + enable = true; + + autoPrune = { + enable = true; + dates = "weekly"; + }; + }; + }; + }; +} diff --git a/modules/nixos/cli/podman.nix b/modules/nixos/cli/podman.nix new file mode 100644 index 00000000..5c325e2d --- /dev/null +++ b/modules/nixos/cli/podman.nix @@ -0,0 +1,25 @@ +{ config, lib, ... }: + +with lib; + +let + cfg = config.nixosModules.cli.podman; +in +{ + options.nixosModules.cli.podman.enable = mkEnableOption "Enable podman"; + + config = mkIf cfg.enable { + virtualisation = { + oci-containers.backend = "podman"; + + podman = { + enable = true; + + autoPrune = { + enable = true; + dates = "weekly"; + }; + }; + }; + }; +} diff --git a/modules/mixins/avahi.nix b/modules/nixos/core/avahi.nix similarity index 100% rename from modules/mixins/avahi.nix rename to modules/nixos/core/avahi.nix diff --git a/modules/nixos/core/bluetooth.nix b/modules/nixos/core/bluetooth.nix new file mode 100644 index 00000000..f53229cf --- /dev/null +++ b/modules/nixos/core/bluetooth.nix @@ -0,0 +1,16 @@ +{ config, lib, ... }: + +with lib; + +let + cfg = config.nixosModules.core.bluetooth; +in +{ + options.nixosModules.core.bluetooth.enable = mkEnableOption "Enable bluetooth"; + + config = mkIf cfg.enable { + hardware.bluetooth.enable = true; + + services.blueman.enable = true; + }; +} diff --git a/modules/nixos/core/default.nix b/modules/nixos/core/default.nix new file mode 100644 index 00000000..560f1b75 --- /dev/null +++ b/modules/nixos/core/default.nix @@ -0,0 +1,11 @@ +{ + imports = [ + ./avahi.nix + ./bluetooth.nix + ./gnupg.nix + ./openssh.nix + ./pipewire.nix + ./xbanish.nix + ./zram.nix + ]; +} diff --git a/modules/nixos/core/gnupg.nix b/modules/nixos/core/gnupg.nix new file mode 100644 index 00000000..6e918951 --- /dev/null +++ b/modules/nixos/core/gnupg.nix @@ -0,0 +1,14 @@ +{ pkgs, ... }: + +{ + security.pam.services.login.gnupg.enable = true; + + programs = { + gnupg.agent = { + enable = true; + enableSSHSupport = true; + + pinentryPackage = pkgs.pinentry-qt; + }; + }; +} diff --git a/modules/nixos/core/openssh.nix b/modules/nixos/core/openssh.nix new file mode 100644 index 00000000..2f5ca9a0 --- /dev/null +++ b/modules/nixos/core/openssh.nix @@ -0,0 +1,23 @@ +{ config, lib, ... }: + +with lib; + +let + cfg = config.nixosModules.core.openssh; +in +{ + options.nixosModules.core.openssh.enable = mkEnableOption "Enable openssh"; + + config = mkIf cfg.enable { + services.openssh = { + enable = true; + + openFirewall = lib.mkForce true; + + settings = { + PasswordAuthentication = false; + PermitRootLogin = lib.mkForce "no"; + }; + }; + }; +} diff --git a/modules/nixos/core/pipewire.nix b/modules/nixos/core/pipewire.nix new file mode 100644 index 00000000..e4d18cae --- /dev/null +++ b/modules/nixos/core/pipewire.nix @@ -0,0 +1,23 @@ +{ config, lib, ... }: + +with lib; + +let + cfg = config.nixosModules.core.pipewire; +in +{ + options.nixosModules.core.pipewire.enable = mkEnableOption "Enable pipewire"; + + config = mkIf cfg.enable { + services.pipewire = { + enable = true; + + alsa = { + enable = true; + support32Bit = true; + }; + + pulse.enable = true; + }; + }; +} diff --git a/modules/nixos/core/xbanish.nix b/modules/nixos/core/xbanish.nix new file mode 100644 index 00000000..282211ac --- /dev/null +++ b/modules/nixos/core/xbanish.nix @@ -0,0 +1,14 @@ +{ config, lib, ... }: + +with lib; + +let + cfg = config.nixosModules.core.xbanish; +in +{ + options.nixosModules.core.xbanish.enable = mkEnableOption "Enable xbanish"; + + config = mkIf cfg.enable { + services.xbanish.enable = true; + }; +} diff --git a/modules/nixos/core/zram.nix b/modules/nixos/core/zram.nix new file mode 100644 index 00000000..2ae366eb --- /dev/null +++ b/modules/nixos/core/zram.nix @@ -0,0 +1,18 @@ +{ config, lib, ... }: + +with lib; + +let + cfg = config.nixosModules.core.zram; +in +{ + options.nixosModules.core.zram.enable = mkEnableOption "Enable zram"; + + config = mkIf cfg.enable { + zramSwap = { + enable = true; + algorithm = "zstd"; + memoryPercent = 90; + }; + }; +} diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix new file mode 100644 index 00000000..da3fce5d --- /dev/null +++ b/modules/nixos/default.nix @@ -0,0 +1,7 @@ +{ + imports = [ + ./cli + ./core + ./desktop + ]; +} diff --git a/modules/nixos/desktop/dconf.nix b/modules/nixos/desktop/dconf.nix new file mode 100644 index 00000000..49f76115 --- /dev/null +++ b/modules/nixos/desktop/dconf.nix @@ -0,0 +1,14 @@ +{ config, lib, ... }: + +with lib; + +let + cfg = config.nixosModules.desktop.dconf; +in +{ + options.nixosModules.desktop.dconf.enable = mkEnableOption "Enable dconf"; + + config = mkIf cfg.enable { + programs.dconf.enable = true; + }; +} diff --git a/modules/nixos/desktop/default.nix b/modules/nixos/desktop/default.nix new file mode 100644 index 00000000..50c6ed82 --- /dev/null +++ b/modules/nixos/desktop/default.nix @@ -0,0 +1,9 @@ +{ + imports = [ + ./dconf.nix + ./dwm + ./fonts.nix + ./st.nix + ./thunar.nix + ]; +} diff --git a/modules/nixos/desktop/dwm/default.nix b/modules/nixos/desktop/dwm/default.nix new file mode 100644 index 00000000..bf082ca7 --- /dev/null +++ b/modules/nixos/desktop/dwm/default.nix @@ -0,0 +1,57 @@ +{ + config, + lib, + pkgs, + ... +}: + +with lib; + +let + cfg = config.nixosModules.desktop.dwm; +in +{ + options.nixosModules.desktop.dwm.enable = mkEnableOption "Enable dwm"; + + config = mkIf cfg.enable { + services = { + dwm-status = { + enable = true; + + order = [ + "audio" + "battery" + "network" + "time" + ]; + }; + + xserver.windowManager.dwm.enable = true; + }; + + systemd.user.services.dwm-status.serviceConfig.Restart = "on-failure"; + + environment.systemPackages = with pkgs; [ + dmenu + dmenu-bluetooth + dunst + networkmanager_dmenu + poweralertd + slock + xdotool + xwallpaper + ]; + + home-manager.users.opdavies = + { config, ... }: + { + home = { + file."${config.home.sessionVariables.XINITRC}".source = ./xinitrc; + + sessionVariables = { + XINITRC = "${config.xdg.configHome}/X11/xinitrc"; + }; + }; + }; + }; +} diff --git a/modules/profiles/dwm/xinitrc b/modules/nixos/desktop/dwm/xinitrc similarity index 100% rename from modules/profiles/dwm/xinitrc rename to modules/nixos/desktop/dwm/xinitrc diff --git a/modules/nixos/desktop/fonts.nix b/modules/nixos/desktop/fonts.nix new file mode 100644 index 00000000..ea2ca3f2 --- /dev/null +++ b/modules/nixos/desktop/fonts.nix @@ -0,0 +1,30 @@ +{ + config, + lib, + pkgs, + ... +}: + +with lib; + +let + cfg = config.nixosModules.desktop.fonts; +in +{ + options.nixosModules.desktop.fonts.enable = mkEnableOption "Enable fonts"; + + config = mkIf cfg.enable { + fonts = { + fontconfig = { + enable = true; + }; + + packages = with pkgs; [ + nerd-fonts.jetbrains-mono + nerd-fonts.meslo-lg + terminus_font + terminus_font_ttf + ]; + }; + }; +} diff --git a/modules/nixos/desktop/st.nix b/modules/nixos/desktop/st.nix new file mode 100644 index 00000000..78dc3059 --- /dev/null +++ b/modules/nixos/desktop/st.nix @@ -0,0 +1,375 @@ +{ + config, + lib, + pkgs, + ... +}: + +with lib; + +let + cfg = config.nixosModules.desktop.st; +in +{ + options.nixosModules.desktop.st.enable = mkEnableOption "Enable st"; + + config = mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + (st.override { + conf = '' + static char *font = "MesloLGSNerdFontMono:pixelsize=16:antialias=true:autohint=true"; + + int disablebold = 1; + int disableitalic = 1; + int disableroman = 1; + + static int borderpx = 2; + + static char *shell = "/bin/sh"; + char *utmp = NULL; + char *scroll = NULL; + char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400"; + + char *vtiden = "\033[?6c"; + + static float cwscale = 1.0; + static float chscale = 1.0; + + wchar_t *worddelimiters = L" "; + + static unsigned int doubleclicktimeout = 300; + static unsigned int tripleclicktimeout = 600; + + int allowaltscreen = 1; + + int allowwindowops = 0; + + static double minlatency = 2; + static double maxlatency = 33; + + static unsigned int blinktimeout = 800; + + static unsigned int cursorthickness = 2; + + static int bellvolume = 0; + + char *termname = "st-256color"; + + unsigned int tabspaces = 8; + + static const char *colorname[] = { + "black", + "red3", + "green3", + "yellow3", + "blue2", + "magenta3", + "cyan3", + "gray90", + + "gray50", + "red", + "green", + "yellow", + "#5c5cff", + "magenta", + "cyan", + "white", + + [255] = 0, + + "#cccccc", + "#555555", + "gray90", + "black", + }; + + unsigned int defaultfg = 258; + unsigned int defaultbg = 259; + unsigned int defaultcs = 256; + static unsigned int defaultrcs = 257; + + static unsigned int cursorshape = 2; + + static unsigned int cols = 80; + static unsigned int rows = 24; + + static unsigned int mouseshape = XC_xterm; + static unsigned int mousefg = 7; + static unsigned int mousebg = 0; + + static unsigned int defaultattr = 11; + + static uint forcemousemod = ShiftMask; + + static MouseShortcut mshortcuts[] = { + { XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 }, + { ShiftMask, Button4, ttysend, {.s = "\033[5;2~"} }, + { XK_ANY_MOD, Button4, ttysend, {.s = "\031"} }, + { ShiftMask, Button5, ttysend, {.s = "\033[6;2~"} }, + { XK_ANY_MOD, Button5, ttysend, {.s = "\005"} }, + }; + + #define MODKEY Mod1Mask + #define TERMMOD (ControlMask|ShiftMask) + + static Shortcut shortcuts[] = { + { XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} }, + { ControlMask, XK_Print, toggleprinter, {.i = 0} }, + { ShiftMask, XK_Print, printscreen, {.i = 0} }, + { XK_ANY_MOD, XK_Print, printsel, {.i = 0} }, + { TERMMOD, XK_Prior, zoom, {.f = +1} }, + { TERMMOD, XK_Next, zoom, {.f = -1} }, + { TERMMOD, XK_Home, zoomreset, {.f = 0} }, + { TERMMOD, XK_C, clipcopy, {.i = 0} }, + { TERMMOD, XK_D, zoom, {.f = -2} }, + { TERMMOD, XK_J, zoom, {.f = -1} }, + { TERMMOD, XK_K, zoom, {.f = +1} }, + { TERMMOD, XK_U, zoom, {.f = +2} }, + { TERMMOD, XK_V, clippaste, {.i = 0} }, + { TERMMOD, XK_Y, selpaste, {.i = 0} }, + { ShiftMask, XK_Insert, selpaste, {.i = 0} }, + { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, + }; + + static KeySym mappedkeys[] = { -1 }; + + static uint ignoremod = Mod2Mask|XK_SWITCH_MOD; + + static Key key[] = { + { XK_KP_Home, ShiftMask, "\033[2J", 0, -1}, + { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1}, + { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1}, + { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1}, + { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0}, + { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1}, + { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1}, + { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0}, + { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1}, + { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1}, + { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0}, + { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1}, + { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1}, + { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0}, + { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1}, + { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1}, + { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0}, + { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, + { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0}, + { XK_KP_End, ControlMask, "\033[J", -1, 0}, + { XK_KP_End, ControlMask, "\033[1;5F", +1, 0}, + { XK_KP_End, ShiftMask, "\033[K", -1, 0}, + { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0}, + { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0}, + { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0}, + { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0}, + { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0}, + { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0}, + { XK_KP_Insert, ControlMask, "\033[L", -1, 0}, + { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0}, + { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, + { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, + { XK_KP_Delete, ControlMask, "\033[M", -1, 0}, + { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0}, + { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0}, + { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0}, + { XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0}, + { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, + { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0}, + { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0}, + { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0}, + { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0}, + { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0}, + { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0}, + { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0}, + { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0}, + { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0}, + { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0}, + { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0}, + { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0}, + { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0}, + { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0}, + { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0}, + { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0}, + { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0}, + { XK_Up, ShiftMask, "\033[1;2A", 0, 0}, + { XK_Up, Mod1Mask, "\033[1;3A", 0, 0}, + { XK_Up, ShiftMask|Mod1Mask, "\033[1;4A", 0, 0}, + { XK_Up, ControlMask, "\033[1;5A", 0, 0}, + { XK_Up, ShiftMask|ControlMask, "\033[1;6A", 0, 0}, + { XK_Up, ControlMask|Mod1Mask, "\033[1;7A", 0, 0}, + { XK_Up, ShiftMask|ControlMask|Mod1Mask, "\033[1;8A", 0, 0}, + { XK_Up, XK_ANY_MOD, "\033[A", 0, -1}, + { XK_Up, XK_ANY_MOD, "\033OA", 0, +1}, + { XK_Down, ShiftMask, "\033[1;2B", 0, 0}, + { XK_Down, Mod1Mask, "\033[1;3B", 0, 0}, + { XK_Down, ShiftMask|Mod1Mask, "\033[1;4B", 0, 0}, + { XK_Down, ControlMask, "\033[1;5B", 0, 0}, + { XK_Down, ShiftMask|ControlMask, "\033[1;6B", 0, 0}, + { XK_Down, ControlMask|Mod1Mask, "\033[1;7B", 0, 0}, + { XK_Down, ShiftMask|ControlMask|Mod1Mask, "\033[1;8B", 0, 0}, + { XK_Down, XK_ANY_MOD, "\033[B", 0, -1}, + { XK_Down, XK_ANY_MOD, "\033OB", 0, +1}, + { XK_Left, ShiftMask, "\033[1;2D", 0, 0}, + { XK_Left, Mod1Mask, "\033[1;3D", 0, 0}, + { XK_Left, ShiftMask|Mod1Mask, "\033[1;4D", 0, 0}, + { XK_Left, ControlMask, "\033[1;5D", 0, 0}, + { XK_Left, ShiftMask|ControlMask, "\033[1;6D", 0, 0}, + { XK_Left, ControlMask|Mod1Mask, "\033[1;7D", 0, 0}, + { XK_Left, ShiftMask|ControlMask|Mod1Mask, "\033[1;8D", 0, 0}, + { XK_Left, XK_ANY_MOD, "\033[D", 0, -1}, + { XK_Left, XK_ANY_MOD, "\033OD", 0, +1}, + { XK_Right, ShiftMask, "\033[1;2C", 0, 0}, + { XK_Right, Mod1Mask, "\033[1;3C", 0, 0}, + { XK_Right, ShiftMask|Mod1Mask, "\033[1;4C", 0, 0}, + { XK_Right, ControlMask, "\033[1;5C", 0, 0}, + { XK_Right, ShiftMask|ControlMask, "\033[1;6C", 0, 0}, + { XK_Right, ControlMask|Mod1Mask, "\033[1;7C", 0, 0}, + { XK_Right, ShiftMask|ControlMask|Mod1Mask, "\033[1;8C", 0, 0}, + { XK_Right, XK_ANY_MOD, "\033[C", 0, -1}, + { XK_Right, XK_ANY_MOD, "\033OC", 0, +1}, + { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0}, + { XK_Return, Mod1Mask, "\033\r", 0, 0}, + { XK_Return, XK_ANY_MOD, "\r", 0, 0}, + { XK_Insert, ShiftMask, "\033[4l", -1, 0}, + { XK_Insert, ShiftMask, "\033[2;2~", +1, 0}, + { XK_Insert, ControlMask, "\033[L", -1, 0}, + { XK_Insert, ControlMask, "\033[2;5~", +1, 0}, + { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, + { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, + { XK_Delete, ControlMask, "\033[M", -1, 0}, + { XK_Delete, ControlMask, "\033[3;5~", +1, 0}, + { XK_Delete, ShiftMask, "\033[2K", -1, 0}, + { XK_Delete, ShiftMask, "\033[3;2~", +1, 0}, + { XK_Delete, XK_ANY_MOD, "\033[P", -1, 0}, + { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, + { XK_BackSpace, XK_NO_MOD, "\177", 0, 0}, + { XK_BackSpace, Mod1Mask, "\033\177", 0, 0}, + { XK_Home, ShiftMask, "\033[2J", 0, -1}, + { XK_Home, ShiftMask, "\033[1;2H", 0, +1}, + { XK_Home, XK_ANY_MOD, "\033[H", 0, -1}, + { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1}, + { XK_End, ControlMask, "\033[J", -1, 0}, + { XK_End, ControlMask, "\033[1;5F", +1, 0}, + { XK_End, ShiftMask, "\033[K", -1, 0}, + { XK_End, ShiftMask, "\033[1;2F", +1, 0}, + { XK_End, XK_ANY_MOD, "\033[4~", 0, 0}, + { XK_Prior, ControlMask, "\033[5;5~", 0, 0}, + { XK_Prior, ShiftMask, "\033[5;2~", 0, 0}, + { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, + { XK_Next, ControlMask, "\033[6;5~", 0, 0}, + { XK_Next, ShiftMask, "\033[6;2~", 0, 0}, + { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0}, + { XK_F1, XK_NO_MOD, "\033OP" , 0, 0}, + { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0}, + { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0}, + { XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0}, + { XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0}, + { XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0}, + { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0}, + { XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0}, + { XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0}, + { XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0}, + { XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0}, + { XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0}, + { XK_F3, XK_NO_MOD, "\033OR" , 0, 0}, + { XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0}, + { XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0}, + { XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0}, + { XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0}, + { XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0}, + { XK_F4, XK_NO_MOD, "\033OS" , 0, 0}, + { XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0}, + { XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0}, + { XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0}, + { XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0}, + { XK_F5, XK_NO_MOD, "\033[15~", 0, 0}, + { XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0}, + { XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0}, + { XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0}, + { XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0}, + { XK_F6, XK_NO_MOD, "\033[17~", 0, 0}, + { XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0}, + { XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0}, + { XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0}, + { XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0}, + { XK_F7, XK_NO_MOD, "\033[18~", 0, 0}, + { XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0}, + { XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0}, + { XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0}, + { XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0}, + { XK_F8, XK_NO_MOD, "\033[19~", 0, 0}, + { XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0}, + { XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0}, + { XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0}, + { XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0}, + { XK_F9, XK_NO_MOD, "\033[20~", 0, 0}, + { XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0}, + { XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0}, + { XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0}, + { XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0}, + { XK_F10, XK_NO_MOD, "\033[21~", 0, 0}, + { XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0}, + { XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0}, + { XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0}, + { XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0}, + { XK_F11, XK_NO_MOD, "\033[23~", 0, 0}, + { XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0}, + { XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0}, + { XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0}, + { XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0}, + { XK_F12, XK_NO_MOD, "\033[24~", 0, 0}, + { XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0}, + { XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0}, + { XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0}, + { XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0}, + { XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0}, + { XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0}, + { XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0}, + { XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0}, + { XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0}, + { XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0}, + { XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0}, + { XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0}, + { XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0}, + { XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0}, + { XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0}, + { XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0}, + { XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0}, + { XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0}, + { XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0}, + { XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0}, + { XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0}, + { XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0}, + { XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0}, + { XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0}, + { XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0}, + { XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0}, + { XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0}, + }; + + static uint selmasks[] = { + [SEL_RECTANGULAR] = Mod1Mask, + }; + + static char ascii_printable[] = + " !\"#$%&'()*+,-./0123456789:;<=>?" + "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" + "`abcdefghijklmnopqrstuvwxyz{|}~"; + ''; + + patches = [ + (fetchpatch { + url = "https://st.suckless.org/patches/disable_bold_italic_fonts/st-disable-bold-italic-fonts-0.8.2.diff"; + sha256 = "PG96QMqbX3Fr0EvDmF4lm/J3gj18eyBfm1bJ3M7plvQ="; + }) + + (fetchpatch { + url = "https://st.suckless.org/patches/anysize/st-anysize-20220718-baa9357.diff"; + sha256 = "yx9VSwmPACx3EN3CAdQkxeoJKJxQ6ziC9tpBcoWuWHc="; + }) + ]; + }) + ]; + }; +} diff --git a/modules/nixos/desktop/thunar.nix b/modules/nixos/desktop/thunar.nix new file mode 100644 index 00000000..dcc99fcc --- /dev/null +++ b/modules/nixos/desktop/thunar.nix @@ -0,0 +1,27 @@ +{ + config, + lib, + pkgs, + ... +}: + +with lib; + +let + cfg = config.nixosModules.desktop.thunar; +in +{ + options.nixosModules.desktop.thunar.enable = mkEnableOption "Enable thunar"; + + config = mkIf cfg.enable { + programs.thunar = { + enable = true; + + plugins = with pkgs.xfce; [ + thunar-archive-plugin + ]; + }; + + environment.systemPackages = with pkgs; [ xfce.tumbler ]; + }; +} diff --git a/modules/profiles/dwm.nix b/modules/profiles/dwm.nix deleted file mode 100644 index 2694857b..00000000 --- a/modules/profiles/dwm.nix +++ /dev/null @@ -1 +0,0 @@ -{ imports = [ ./dwm ]; } diff --git a/modules/profiles/dwm/default.nix b/modules/profiles/dwm/default.nix deleted file mode 100644 index cc264b62..00000000 --- a/modules/profiles/dwm/default.nix +++ /dev/null @@ -1,47 +0,0 @@ -{ pkgs, ... }: - -{ - imports = [ - ../../mixins/st.nix - ]; - - services = { - dwm-status = { - enable = true; - - order = [ - "audio" - "battery" - "network" - "time" - ]; - }; - - xserver.windowManager.dwm.enable = true; - }; - - systemd.user.services.dwm-status.serviceConfig.Restart = "on-failure"; - - environment.systemPackages = with pkgs; [ - dmenu - dmenu-bluetooth - dunst - networkmanager_dmenu - poweralertd - slock - xdotool - xwallpaper - ]; - - home-manager.users.opdavies = - { config, ... }: - { - home = { - file."${config.home.sessionVariables.XINITRC}".source = ./xinitrc; - - sessionVariables = { - XINITRC = "${config.xdg.configHome}/X11/xinitrc"; - }; - }; - }; -} diff --git a/modules/profiles/xbanish.nix b/modules/profiles/xbanish.nix deleted file mode 100644 index 4a584a7a..00000000 --- a/modules/profiles/xbanish.nix +++ /dev/null @@ -1 +0,0 @@ -{ services.xbanish.enable = true; } diff --git a/modules/users/eric.nix b/users/eric.nix similarity index 100% rename from modules/users/eric.nix rename to users/eric.nix diff --git a/modules/users/luke.nix b/users/luke.nix similarity index 100% rename from modules/users/luke.nix rename to users/luke.nix diff --git a/modules/users/opdavies.nix b/users/opdavies.nix similarity index 82% rename from modules/users/opdavies.nix rename to users/opdavies.nix index f94a8ef7..7043c56c 100644 --- a/modules/users/opdavies.nix +++ b/users/opdavies.nix @@ -1,4 +1,9 @@ -{ lib, pkgs, ... }: +{ + config, + lib, + pkgs, + ... +}: with lib; @@ -8,10 +13,13 @@ with lib; initialPassword = "opdavies"; isNormalUser = true; - extraGroups = [ - "networkmanager" - "wheel" - ]; + extraGroups = + [ + "networkmanager" + "wheel" + ] + ++ optional config.nixosModules.cli.docker.enable "docker" + ++ optional config.nixosModules.cli.podman.enable "podman"; packages = with pkgs; [ qrencode